1

我有一个带有时间戳的网络摄像头文件的目录。它从午夜开始,每分钟拍一张照片。

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
)

如果在完成作业后,您需要更改回在调用批处理文件之前处于活动状态的目录,请使用PUSHDand POPD

@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 回答