Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 如何编写一个Windows批处理文件,用一个数值更新文件夹中的所有文件名?_Batch File_Batch Rename - Fatal编程技术网

Batch file 如何编写一个Windows批处理文件,用一个数值更新文件夹中的所有文件名?

Batch file 如何编写一个Windows批处理文件,用一个数值更新文件夹中的所有文件名?,batch-file,batch-rename,Batch File,Batch Rename,我有一个文件夹“C:\Pictures\test”,其中包含大约200张照片,没有其他内容。(事实上,在我使用这段代码之前,它只包含2张照片。)照片是不同的文件类型(.png、.jpg等),它们的名称都是数字。我想给这些文件名添加一个固定的数字,例如“4500.png”->“4700.png”和“4501.jpg”->“4701.jpg”。我希望这种情况会再次发生,所以我真的想把它自动化。因此,几个小时前,我了解到Windows批处理文件存在。请温柔一点——我甚至不知道如何问我不懂的事情。(在提

我有一个文件夹“C:\Pictures\test”,其中包含大约200张照片,没有其他内容。(事实上,在我使用这段代码之前,它只包含2张照片。)照片是不同的文件类型(.png、.jpg等),它们的名称都是数字。我想给这些文件名添加一个固定的数字,例如“4500.png”->“4700.png”和“4501.jpg”->“4701.jpg”。我希望这种情况会再次发生,所以我真的想把它自动化。因此,几个小时前,我了解到Windows批处理文件存在。请温柔一点——我甚至不知道如何问我不懂的事情。(在提出这个问题之前,谷歌搜索了两个小时,其中一些甚至很有帮助。)

通过拼凑其他地方的代码,我编写了以下代码(请注意,我并不真正关心捕获任何异常):

通过
CD
的一切都可以正常工作。但是
FOR
语句行没有(难怪——这是我没有从某处复制的代码的唯一部分!)。当我运行它时,它不会抱怨,但它也不会做任何事情——没有输出;文件名没有更改

我希望
DO
语句执行的操作:

  • 定义一个变量
    newname
    ,它是文件名
    %%i
    (记住,这是一个数字)+
    addnum
  • 将文件名
    %%i
    设置为

我应该如何编写这个批处理文件

可以使用以下批处理文件,该批处理文件只有一个基本的错误处理

@echo off
setlocal EnableExtensions DisableDelayedExpansion
set "addnum=100"
set "loc=."
set /P "addnum=Enter number to add to all photo names: "
set /P "loc=Enter folder location to navigate to: "
pushd "%loc%"
if errorlevel 1 goto EndBatch
setlocal EnableDelayedExpansion
for /F "eol=| delims=" %%I in ('dir *.jpg *.png /A-D /B 2^>nul ^| %SystemRoot%\System32\findstr.exe /I /R "^[0123456789][0123456789]*\.jpg$ ^[0123456789][0123456789]*\.png$"') do (
    set /A NewName=%%~nI + addnum
    ren "%%I" "!NewName!%%~xI"
)
endlocal
popd
:EndBatch
endlocal
pause
要了解所使用的命令及其工作方式,请打开一个窗口,在其中执行以下命令,并非常仔细地阅读为每个命令显示的所有帮助页面

  • cd/?
  • dir/?
  • echo/?
  • endlocal/?
  • findstr/?
  • 获取/?
  • goto/?
  • 如果/?
  • 暂停/?
  • popd/?
  • pushd/?
  • ren/?
  • 设置/?
  • setlocal/?

如果您不熟悉批处理文件编码,我建议使用GUI应用程序重命名文件。例如,免费(供私人使用)多媒体查看器IrfanView的菜单文件中有“批量转换/重命名”菜单项,用于以自动递增的数字重命名文件。或者使用shareware file manager Total Commander及其内置的菜单文件多重重命名工具(在选择文件后使用Ctrl+M,例如使用Ctrl+A或Num++)。如果您想尝试使用批处理文件执行此操作,最明显的方法是先确定最大的数字,然后开始递增该数字,否则,可能会导致名称冲突。您应该做的另一件事是使用解析方法,在执行
do
部分之前读取所有文件名。这样,新重命名的文件将不会被
命令重新解析
/
设置
,而是以一个永无止境的循环进行处理!还感谢您提供更多信息(即如何查找帮助页面)+评论中的GUI建议的指导。
@echo off
setlocal EnableExtensions DisableDelayedExpansion
set "addnum=100"
set "loc=."
set /P "addnum=Enter number to add to all photo names: "
set /P "loc=Enter folder location to navigate to: "
pushd "%loc%"
if errorlevel 1 goto EndBatch
setlocal EnableDelayedExpansion
for /F "eol=| delims=" %%I in ('dir *.jpg *.png /A-D /B 2^>nul ^| %SystemRoot%\System32\findstr.exe /I /R "^[0123456789][0123456789]*\.jpg$ ^[0123456789][0123456789]*\.png$"') do (
    set /A NewName=%%~nI + addnum
    ren "%%I" "!NewName!%%~xI"
)
endlocal
popd
:EndBatch
endlocal
pause