

バッチ初心者です。
指定したフォルダのテキストファイルを一括置換するバッチファイルを作成したのですが、
for文を使うところでつまづいてしました。
for文のin( )内にディレクトリを入れると失敗してしまいます。
失敗例↓
for %%f in (d:\aaa\*.txt) do (
set fname=%%f
set fname=!fname:%1=%2!
ren %%f !fname!
)
for文を
for %%f in (*.txt)
にすると成功します。
IN( )内にディレクトリを入れると処理が失敗するのはなぜでしょうか??
helpを読んでもわかりません。
試しにオプション付けて
for /r d:\aaa %%f in (*.txt) do echo %%f
を実行すると成功するので、
for /r d:\aaa %%f in (*.txt) do (
・・・・
)
にしてみましたが、成功しません。。。
No.5ベストアンサー
- 回答日時:
補足どもです。
> renの部分をechoで出力してみたところ、
> ren d:\aaa\sample01.txt d:\aaa\aample01.txt
> というように、しっかりと変更されていました。
まずそのコマンドを単独でコマンドプロンプトから実行してみてください。
「コマンドの構文が誤っています。」と出てきましたね?
つまりrenコマンドの使い方が間違っています。
どこが間違っているのかは、コマンドプロンプトで
ren /?
を実行してrenのヘルプを見て確認してください。
どこが間違っているのか分かったところで
次はこれを修正する方法ですが、
1つの方法として
set fname=%%f
を
set fname=%%~nxf
と修正するという手があります。
%~nx の意味は
for /?
を実行してforのヘルプを見て確認してください。
ご指摘の通りに修正したところ成功しました。
ヘルプの読み込みが足りないことを痛感しました。
また、エラー原因の探し方が大変勉強になりました。
本当にありがとうございました。
No.4
- 回答日時:
うまくいかないならどううまくいかないのか位書こうよ。
例えばこんなエラーが出るとか、
renのところをechoで出力してみたら期待していたのと違うとか。
でも、forの中身をechoだけにしてうまくいくなら、
forは正しく動いているけどforの中身が間違ってるのでは?
遅延環境変数の展開を使ってるみたいだけど
まさか遅延環境変数の展開を有効にしてないってことはないよね?
この回答への補足
私の文章が変だったので、訂正します。
>>しかし、dir /b で見てみるとsample01.txtのままです。
これは、echoで見ているから当たり前ですね。
回答ありがとうございます。
>うまくいかないならどううまくいかないのか位書こうよ。
失礼しました。
D:\aaa>cmd.exe /v:on /c Sample23.bat s a
で実行すると、
コマンドの構文が誤っています。
といわれてしまいます。
renの部分をechoで出力してみたところ、
ren d:\aaa\sample01.txt d:\aaa\aample01.txt
というように、しっかりと変更されていました。
しかし、dir /b で見てみるとsample01.txtのままです。
echoで出力してわかったのですが、
in( )内にディレクトリを入れるとディレクトリも変更対象に
なるみたいで、テキストファイルがリネームされないみたいです。
No.1
- 回答日時:
ディレクトリが間違っているのか、長すぎて認識できないのかでしょう。
またディレクトリにスペースや特殊記号などで認識されない場合があります。ダブルクォーテーション"でくくるか、ディレクトリを変更するかしたら良いと思います。
回答ありがとうございます。
>ディレクトリが間違っているのか、長すぎて認識できないのかでしょう。
ディレクトリは、実際にd:\aaaというフォルダを作った後バッチを実行しているので、長すぎはなさそうです。
あと、for /r d:\aaa %%f in (*.txt) do echo %%fで成功してるのでディレクトリはあってそうです。
>またディレクトリにスペースや特殊記号などで認識されない場合があります。ダブルクォーテーション"でくくるか、ディレクトリを変更するかしたら良いと思います。
ダブルクォーテーションでくくってみましたが、駄目でした。
確かにディレクトリを書かなければ良い問題なのですが、書くとなぜ失敗するのか知りたいです。。。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
xcopyで特定のファイルのみをコ...
-
コマンドプロンプトで相対パス...
-
【VBA】テキストファイルから特...
-
echoの出力の最後のスペースを...
-
リダイレクト >> を複数のファ...
-
echo "abc" >> test.txt で、先...
-
コマンド実行結果を環境変数に...
-
バッチファイルで改行の出力
-
コマンドプロンプトで標準エラ...
-
バッチファイル 現在のフォルダ...
-
NULLの置き換えについて
-
バッチファイルで特定の文字列...
-
ファイル名ソートにハイフン
-
フォルダに入っているファイル...
-
シェルから引数を使用してsedコ...
-
.txtって、縦書きにはならない...
-
大量のフォルダからひとつのフ...
-
コマンドプロンプトの「%1」と...
-
バッチでテキストファイルから...
-
コマンドプロンプトのエラーに...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
echoの出力の最後のスペースを...
-
xcopyで特定のファイルのみをコ...
-
【VBA】テキストファイルから特...
-
echo "abc" >> test.txt で、先...
-
コマンドプロンプトで相対パス...
-
リダイレクト >> を複数のファ...
-
コマンドプロンプトで標準エラ...
-
バッチファイル 指定行の切り出し
-
バッチファイルのfor文を使って...
-
バッチファイル 現在のフォルダ...
-
コマンド実行結果を環境変数に...
-
バッチファイルで改行の出力
-
NULLの置き換えについて
-
.txtって、縦書きにはならない...
-
複数テキストファイル連結につ...
-
バッチコマンドの「set」で入力...
-
Diskpart のリダイレクトの質問...
-
特定のファイルだけをサブディ...
-
DOSプロンプト:一番速く10万...
-
nkfで全角ハイフンが半角になる...
おすすめ情報