こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

BATファイルでプログラムファイルの書き換え

-----------------------------------------------------------------
@echo off
set TEST="C:\Program Files\TEST\"

echo 書き換え処理を開始します。
for /f %%A in ('dir /b /s %TEST%test.txt') do copy NEW\test.txt "%%A"

echo 全ての処理は完了しました。
echo 終了するには何かキーを押してください。
pause > nul
-----------------------------------------------------------------


Program Files\TEST\内のtest.txtを検索して、それらすべてをNEW\test.txtで上書きするというBATファイルを作りたいのですが、上記のコードではちゃんと動作しません。
Program Files以外のフォルダを指定すると正しく動作してくれるので、おそらくProgram Filesの半角スペースがエラーの原因だと考えました。
このコードもいろいろなサイトとかを見て、自分なりに考えて作ってみました。
が、どうやったらいいのか考えても全然わからなかったので、どなたか教えていただけたら嬉しいです^^
よろしくお願いします!

投稿日時 - 2012-05-25 12:47:53

QNo.7495216

困ってます

質問者が選んだベストアンサー

No3さんの答えでも良いのですが、区切り文字(delims)は空に出来るので、
for /f "delims=" %%A in ('dir /b /s %TEST%test.txt') do copy NEW\test.txt "%%A"

何も指定しない場合の区切り文字は空白とタブです。つまり%%A にはデータを空白文字で区切った最初の一語が入ります。tokens=1-2 とか書くと、二番目の語が %%B に入ります。
詳しい説明は、for /? で表示できます。

"delims=" だと区切り文字が無くなるので、行全体が %%A に入ります。

投稿日時 - 2012-05-25 23:01:52

ANo.4

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(4)

ANo.3

delims 使ってもいいとおもう。
delims は、ファイルで使われることがない記号で、コマンドラインに悪影響がなければ何でもOK。

C:\> Set TEST="C:\Program Files\TEST\"
C:\> For /f "delims=<" %i in ('Dir /s /b %TEST%test.txt') do @echo.copy NEW\test.txt "%i"

投稿日時 - 2012-05-25 15:06:31

ANo.2

どう「ちゃんと動作しない」のですか?

投稿日時 - 2012-05-25 14:50:17

ANo.1

Windows3.1以前との互換性のため、長いフォルダ名/ファイル名には、短縮形の名前が付けられています。

dir c:\ /x
というコマンドを実行すると、その短縮形を見ることができます。
(たぶん、PROGRA~1 ってなっていると思う)

なので、Program Files の代わりに、PROGRA~1 って書けばよいですよ。

投稿日時 - 2012-05-25 12:55:01

あなたにオススメの質問