2017-01-15 4 views
1
@echo 

cd\ 

cd C:\Test\pdf 

for /f "delims=" %%i in ('dir /b | findstr /E /R "\\BW RRI - [0-9]\.[0-9]\PAYMENT CONFIRMATION.pdf$"') do set "Filename=%%i" ren ("%FileName%" "test.pdf") 

EXIT 

ファイルを探して名前を変更するために、上記のバッチを実行しようとしています。ファイル名にはスペースがあります。コマンドプロンプトで次のコマンドを実行すると、正しいファイルが見つかりませんでした。正規表現を使用してファイルを検索して名前を変更するバッチファイル

dir /b | findstr /E /R "\\BW RRI - [0-9]\.[0-9]\PAYMENT CONFIRMATION.pdf$" 

しかし、私はループの名前を変更するために使用すると動作しません。私は間違って何をしていますか?

+0

なぜforループで%% iと%% aを使用するのですか?私はこれがあなたの誤りかもしれないと思う。 – Sascha

+0

スタックオーバフローで貼り付けるときに名前を変更しようとしていたのは、タイプミスでした。私が%% iを使用しても、それはまだ動作しません。 – PPrat

+2

実際に 'set'と' ren'コマンドは同じ行にありますか?あなたはそれをすることはできません。 – SomethingDark

答えて

0

3エラー。

まず、全体for /f...ラインが解析され、任意%var%、その当時の現在の値に置き換えられ、そうren句はren ("" "test.pdf")

第二なり、括弧はrenにパラメータに含まれるであろうとあるべきです削除

第3に、命令をカスケードするには、set句とrenを、それぞれ、&で区切る必要があります。

.... do ren "%%i" "test.pdf" 

この問題を修正する必要があります。 filenameを設定する必要はありません。

+0

私は何をしますか?/fとの最初の問題の変更...? – PPrat

+0

追加^トリックはあなたに感謝しました! – PPrat

関連する問題