電子書籍の厳選無料作品が豊富!

以下のバッチファイルを作成して実行したのですが、PATH_NAMEの変数が
設定されず、ファイルコピーがされません。

どのように、コードを記載すれば良いのでしょうか。

ご教授願います。


REM コピーするファイル数を設定
SET /a FILE_NUM = 2

REM コピー元のパスを設定
SET PATH_P1=C:\Copy01.txt
SET PATH_P2=C:\SAMPLE\Copy02.txt

REM 上記で設定したファイルを順番にC:\TEST\へコピーする
SET /a N=1
:LOOP
SET /p PATH_NAME = PATH_P%N%
copy %PATH_NAME% C:\TEST\
if "%N%"== "FILE_NUM " (goto EXIT)
SET /a N=N+1
goto LOOP
:EXIT

A 回答 (3件)

ん? 手元の Vista ではそれっぽい方法できちんと設定できてます.


最初の質問にあったプログラムに
・最初に setlocal enabledelayedexpansion を入れる
・SET /p PATH_NAME = PATH_P%N% を SET PATH_NAME=!PATH_P%N%! にする
・copy を (そんなファイルは当然ないので) echo %PATH_NAME% に変更
として, PATH_P1, PATH_P2 に与えたものが表示されることは確認しています.

「これでもPATH_NAMEが設定されません。」をどう確認したのか, ちょっと気になりますが....
    • good
    • 0
この回答へのお礼

ありがとうございました。

結局、pita-gora様からご指摘いただいたように、「空白」が原因でした。

質問の仕方が悪く、ご迷惑をおかけしました。

お礼日時:2011/03/03 23:15

こんにちは。


この行の「=」の前後の空白を取りましょう。

SET PATH_NAME = !PATH_P%N%!

SET PATH_NAME=!PATH_P%N%!

空白がある場合、%PATH_NAME%ではなく、%PATH_NAME %でないと参照できませんよ。

あと
if "%N%"== "FILE_NUM " (goto EXIT)

if "%N%"=="%FILE_NUM%" goto EXIT
にしましょう。
    • good
    • 0
この回答へのお礼

pita-gora様、ありがとうございました。

おっしゃる通り、空白を取ったら、うまくいきました。

遅延展開について、最初にご教授頂いたのがTacosan 様でしたので、Tacosan 様をベストにさせていただきましたが、決定的なご指摘だったので、大変感謝しております。

ありがとうございました。

お礼日時:2011/03/03 23:13

推測はできるけど一応「何をしたいのか」は書いておこうよ.



遅延展開でできると思うけど.

この回答への補足

大変失礼しました。

すでに推測していただいているとは思いますが・・・

PC上のある特定のファイルを、指定したフォルダにすべてコピーするものです。

実際には、コピーしたいファイルは順次増やしていくつもりなので、こういったコードにしました。

ちなみに、遅延展開というのは、これであっていますか?

SETLOCAL enabledelayedexpansion
SET PATH_NAME = !PATH_P%N%!
copy %PATH_NAME% C:\TEST\
ENDLOCAL

これでもPATH_NAMEが設定されません。

補足日時:2011/03/02 16:26
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!