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