2017-06-09 10 views
1

最初は繰り返し質問ではありません(願っています)。私はたくさんの検索をして、How to find files with no file extension in directory tree with a batch file?Find and rename files with no extension?を見つけましたが、私は「小さな」追加の問題があります。Windowsのバット:拡張子のないファイル(名前の問題点)

Windows 10で複数(数千)のjpgファイルの名前を変更しようとしています。名前の形式は「名前(ABC).jpg」または「複数名(ABC).jpg」です。 "Some Name.jpg"が必要です。

何を試しましたか?たくさんのこと、これまでそれらのどれも本当の解決策、:名前のドットがあります場合を除き、

for /f "tokens=1-3 delims=)(" %%a in ('dir /b *.jpg') do @rename "%%a(%%b)%%c" "%%a" 
for /R %%x in (*.) do ren "%%x" *.png 

それはファイル、のほとんどのために正常に動作します。名前が「A Name.Supercool(ABC).jpg」のような名前の場合、拡張子のない「A Name.Supercool」のみになります。

は、私が(*。)問題は上で知って、ちょうど解決する方法がわからない...

+2

"何を試してみましたか?多くのことがありますが、どれも本当の解決策ではありません。" - しかもpowershellでは本当の解決策は単にgci * .jpg | ren -newname {($ _。ベース名-replace '\ s + \(。* \)')+ ".png"} 'away。 – TessellatingHeckler

+0

もっと良い解決策、ありがとうございます。それは受け入れられた答えかもしれません。 –

答えて

1

あなたの問題はあなたのファイルの名前を変更すると、「%%」「Name.Supercool」を生成するということです - これには「拡張子なし」があります。

ああ - そうです。ファイル名は "A Name"、拡張子は ".Supercool"

ファイルの名前を "%% a %% c"に変更した場合、名前は "A Name.Supercool.jpg"になります。

ファイルを拡張子のない名前に変更した後、名前を*.pngに変更する理由は分かりませんが、残念なことに説明しません。本当にあなたがしたいことがあったのであれば、なぜ.png%%aに貼り付けたのですか?

は(BTW - for /f ... dir...アプローチは、それらの名前を変更し、ファイルのメモリ・リストを作成しますので、彼らはfor %%x in (*.jpg)...で発生する可能性として再処理されません)


ターミナル空間を考えます-in-名の問題は、

for /f "tokens=1-3 delims=)(" %%a in ('dir /b *.jpg') do rename "%%a(%%b)%%c" "%%a%%c" 
SETLOCAL enabledelayedexpansion 
for /f "delims=" %%a in ('dir /b "* .jpg"') do (
SET "name=%%a" 
REN "%%a" "!name:~0,-5!.jpg" 
) 
endlocal 
+2

''複数の名前(ABC).jpg "分割は名前の最後にスペースがあり、' .png'をタックすると ''複数の名前.png "'が空白になります。私はそれが彼らがそれをやっていない理由だと推測します。 – TessellatingHeckler

+0

「%A(%% b)%% c」「%% a %% c」を試しましたが、「A Name .jpg」のような拡張子の前にスペースを入れています(編集:そこ)。その後、私はそれをやった(最初にそれを拡張し、名前を変更する)。おそらく何をするべきかを知っている人のための悪い考えです... –

+0

末尾のスペースを削除するサブルーチンに '%% a'を渡す方が良いでしょうか?それで 'ren" %%(%% b)%% c ""!name!.png "'を1回だけ実行できます。 – eryksun

1

マグーの答えは、私が尋ねたものに近いですが、ファイル名に特殊文字に問題があります。 TessellatingHecklerがコメントとして最高のアプローチを投稿しました。バッチファイル:

powershell -command "gci *.jpg | ren -newname { ($_.basename -replace '\s+\(.*\)') + '.jpg'};gci *.png | ren -newname { ($_.basename -replace '\s+\(.*\)') + '.png'}" 

これで、.jpgと.pngを一度に完璧に処理できます。皆さん、ありがとうございました。

関連する問題