1

タイムスタンプ付きの webcamfiles でいっぱいのディレクトリがあります。真夜中に始まり、毎分写真を撮ります。

0001webcamimage.jpg
0002webcamimage.jpg
0003webcamimage.jpg
...
0059webcamimage.jpg
0100webcamimage.jpg

ここで、バッチファイルを含むすべてのファイルをこの形式に変換したいと考えています。順序が重要です。

0001.jpg
0002.jpg
0003.jpg
...
0060.jpg
0061.jpg

誰かが私を助けることができますか?

4

3 に答える 3

1

Windows と 4 桁のプレフィックスを想定

setlocal enabledelayedexpansion
for %%f in (*webcamimage.jpg) do (
    set name=%%f
    ren "!name!" "!name:~0,4!.jpg"
)
于 2012-08-10T12:34:52.307 に答える
1

以下は @Alex K. の提案に似ていますが、元の名前から数字を抽出していません。代わりに、カウンターを使用し、カウンターの値を使用して新しい名前を形成します。

@ECHO OFF
SET /A num=10000
FOR %%I IN (*webcamimage.jpg) DO (
  SET /A num+=1
  SETLOCAL EnableDelayedExpansion
  RENAME "%%I" !num:~-4!.*
  ENDLOCAL
)

新しい名前は常に で始まることに注意してください0001.jpg

アップデート

バッチ ファイルが画像と同じディレクトリにない場合は、次のようにパスを指定できます。

@ECHO OFF
SET /A num=10000
FOR %%I IN (D:\path\to\images\*webcamimage.jpg) DO (
  SET /A num+=1
  SETLOCAL EnableDelayedExpansion
  RENAME "%%I" !num:~-4!.*
  ENDLOCAL
)

または、ループの前にコマンドを追加してCD /D、画像があるディレクトリに変更することもできます。

@ECHO OFF
CD /D D:\path\to\images
SET /A num=10000
FOR %%I IN (*webcamimage.jpg) DO (
  SET /A num+=1
  SETLOCAL EnableDelayedExpansion
  RENAME "%%I" !num:~-4!.*
  ENDLOCAL
)

ジョブの終了後に、バッチ ファイルの呼び出し前にアクティブだったディレクトリに戻す必要がある場合は、 and を使用PUSHDPOPDます。

@ECHO OFF
PUSHD D:\path\to\images
SET /A num=10000
FOR %%I IN (*webcamimage.jpg) DO (
  SET /A num+=1
  SETLOCAL EnableDelayedExpansion
  RENAME "%%I" !num:~-4!.*
  ENDLOCAL
)
POPD

もちろん、パスをパラメータ化して、バッチ ファイルを呼び出すときにコマンド ラインで指定できるようにすることもできます。方法は次のとおりです。

@ECHO OFF
SET "imagepath=%~1"
SET /A num=10000
FOR %%I IN ("%imagepath%\*webcamimage.jpg") DO (
  SET /A num+=1
  SETLOCAL EnableDelayedExpansion
  RENAME "%%I" !num:~-4!.*
  ENDLOCAL
)

これで、コマンド プロンプトで、または次のように別のバッチ ファイルからバッチ ファイルを呼び出すことができます。

batchname.bat D:\path\to\images

(ご存じない場合: 別のバッチ ファイルからバッチ ファイルを呼び出す場合は、呼び出されるバッチ ファイルCALLの名前の前に追加する必要がある可能性があります。)CALL batchname parameters

于 2012-08-11T21:56:15.650 に答える
-1

Linux では、 rename を使用します。

rename 'webcamimage' '' *.jpg
于 2012-08-10T12:32:12.367 に答える