如何编写Windows批处理文件,该文件以数字值更新文件夹中的所有文件名?

问题描述 投票:0回答:1

我有一个文件夹“ 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>

我应该如何实际编写此批处理文件?

batch-file batch-rename
1个回答
0
投票

可以使用以下仅具有基本错误处理功能的批处理文件。

@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 /?
© www.soinside.com 2019 - 2024. All rights reserved.