0

私は次のことを行っているバッチスクリプトのこの部分を持っています:

-すべてのサブフォルダーの下で、ファイルの名前が変更されます:「jpg、gif、png」から「ポスター 1」、「ポスター 2」、「ポスター 3」など... (拡張子は変更されません)

set i=0
for %%b in (*.jpg *.gif *.png) do (
  set /A i+=1
   ren "%%b" "Poster !i!%%~Xb"
  echo File "%%b" renamed to "Poster !i!%%~Xb"
)

rem PATCH を使用して、前の FOR コマンドのバグを修正します (無視してください:前の FOR コマンドにはバグがあり 、フォルダーに画像ファイルが 2 つしかない場合、1 つのファイルの名前を 2 回変更します)。

if !i! neq 0 if not exist "Poster 1.*" (
  ren "Poster !i!.*" "Poster 1.*"
  echo ...and renamed back to "Poster 1"
)

!!!!! 私が必要とするのは次のとおりです:!!!!! -フォルダー内にファイルが 1 つしかない場合は、名前を「ポスター
」に変更 する必要があります。これがないと、このスクリプトは名前を「ポスター 1」に変更し ます。ありがとうございます!

4

2 に答える 2

1

単なる論理的な解決策です。 do loop の後、「i」の値を再度確認し、それが 1 の場合は、もう一度名前変更操作を実行できます [Rename Poster1 to Poster]。お役に立てれば

于 2012-12-27T12:49:17.797 に答える
0

patchifコマンドの後:

if !i! equ 1 ren "Poster 1.*" "Poster.*"

編集

patchifコマンドの後に前の行を挿入すると (前述のとおり)、最終的なコードは次のようになります。

set i=0
for %%b in (*.jpg *.gif *.png) do (
   set /A i+=1
   ren "%%b" "Poster !i!%%~Xb"
   echo File "%%b" renamed to "Poster !i!%%~Xb"
)
rem PATCH to fix a bug in previous FOR command:
if !i! neq 0 if not exist "Poster 1.*" (
   ren "Poster !i!.*" "Poster 1.*"
   echo ...and renamed back to "Poster 1"
)
REM NEW COMMAND TO RENAME THE UNIQUE FILE TO "Poster":
if !i! equ 1 ren "Poster 1.*" "Poster.*"

アントニオ

于 2012-12-27T19:55:31.357 に答える