バッチ初心者です。
指定したフォルダのテキストファイルを一括置換するバッチファイルを作成したのですが、
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で質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) pythonでクラスで複数のメソッドを利用する方法 2 2022/04/15 04:17
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/07/15 15:12
- Excel(エクセル) Excelにて、フォルダ内のTextファイルをマクロで統合すると文字化けしてしまう時の解消コード 4 2023/01/01 07:32
- Visual Basic(VBA) outlook マクロが終了しません。 1 2022/09/02 11:14
- Visual Basic(VBA) ExcelVBAに関する質問 3 2023/02/17 10:47
- その他(プログラミング・Web制作) python 3.10で 同じlistに同じ構文で同じデータ代入した結果が異なる現象発生 7 2022/06/18 11:08
- Ruby パイソンでテキストファイルが読み込めない 1 2022/11/14 16:42
- Windows 10 Windowsのバッチファイルで正規表現の置換方法について… 4 2022/12/09 16:00
- 中学校 Where did Judy and Emi see Judy’s friend in Americ 0 2023/01/29 21:55
- その他(プログラミング・Web制作) ColabでのPytorchのエラー 1 2022/11/19 20:51
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
コマンドプロンプトで標準エラ...
-
echo "abc" >> test.txt で、先...
-
echoの出力の最後のスペースを...
-
ファイル名ソートにハイフン
-
バッチファイルで改行の出力
-
xcopyで特定のファイルのみをコ...
-
リダイレクト >> を複数のファ...
-
ファイルを行ごとに比較するシ...
-
バッチファイルのfor文を使って...
-
Linux(raspberry pi)でのcpコマ...
-
複数のテキストファイルをひと...
-
bashで、gotoのようなラベルに...
-
アスタリスクを文字列として変...
-
バッチファイル 指定行の切り出し
-
ファイル名の一部を変更するバ...
-
テキストエディット等で書いた...
-
sedの置換文字に変数を使用した...
-
コマンドプロンプトで相対パス...
-
エクセルのセルに設定したハイ...
-
バッチファイル 現在のフォルダ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
xcopyで特定のファイルのみをコ...
-
echoの出力の最後のスペースを...
-
コマンドにてテキストファイル...
-
echo "abc" >> test.txt で、先...
-
【VBA】テキストファイルから特...
-
コマンドプロンプトで標準エラ...
-
バッチファイルで改行の出力
-
NULLの置き換えについて
-
コマンド実行結果を環境変数に...
-
コマンドプロンプトで相対パス...
-
バッチファイル 指定行の切り出し
-
sedの置換文字に変数を使用した...
-
リダイレクト >> を複数のファ...
-
batファイルの結果をテキストに...
-
UNIX ファイル存在チェックの方法
-
bashで、gotoのようなラベルに...
-
バッチファイル 現在のフォルダ...
-
エクセルのセルに設定したハイ...
-
コマンドプロンプトでFTPでエラー
-
Linux(raspberry pi)でのcpコマ...
おすすめ情報