我有一个文件夹“ C:\ Pictures \ test”,其中包含约200张照片,仅此而已。 (实际上,直到使此代码生效,它只包含2张照片。)这些照片是不同的文件类型(.png,.jpg等),并且它们的名称都是数字。我想为这些文件名添加一个固定的数字,例如“ 4500.png”->“ 4700.png”和“ 4501.jpg”->“ 4701.jpg”。我希望这种情况会再次发生,所以我真的很想自动化它。因此,几个小时前,我了解到Windows批处理文件存在。请保持温柔-我什至不知道该问些我不了解的事情。 (在此问题之前,进行了两个小时的谷歌搜索。其中一些功能甚至有所帮助。)
通过将其他地方的代码合并在一起,我已经编写了这段代码(请注意,我实际上并不关心捕获任何异常):
::renames all files in a folder by adding a fixed value
@ECHO OFF
SET /p addnum="Enter number to add to all photo names: "
SET /p loc="Enter folder location to navigate to: "
CD %loc%
FOR /F %%i IN ("*.*") DO (SET newname = SET /a %%i+%addnum% & SET file_name = %newname%)
PAUSE
通过CD
的所有操作均有效。但是FOR
语句行没有(难怪-这是我没有从某处复制的代码的唯一部分!)。当我运行它时,它不会抱怨,但是它也不做任何事情-没有输出;文件名没有变化。
我希望DO
语句执行的操作:
newname
的变量%%i
(记住,这是一个数字)+ addnum
%%i
设置为<newname>.<extension>
我应该如何实际编写此批处理文件?
可以使用以下仅具有基本错误处理功能的批处理文件。
@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
为了了解所使用的命令及其工作方式,请打开command prompt窗口,在其中执行以下命令,并非常仔细地阅读每个命令显示的所有帮助页面。
cd /?
dir /?
echo /?
endlocal /?
findstr /?
for /?
goto /?
if /?
pause /?
popd /?
pushd /?
ren /?
set /?
setlocal /?