求BAT或者VBS脚本,批量重命名一个文件夹下面的文件为0001 、0002、0003、0004、0005、依次等等

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了求BAT或者VBS脚本,批量重命名一个文件夹下面的文件为0001 、0002、0003、0004、0005、依次等等相关的知识,希望对你有一定的参考价值。

@echo off & setlocal enabledelayedexpansion
pushd "test"
rem test是文件夹名称
for /f "tokens=* delims=" %%i in ('dir /s /b /a-d') do (
set /a num+=1
if !num! lss 1000 set "name=0!num!"
if !num! lss 100 set "name=00!num!"
if !num! lss 10 set "name=000!num!"
ren "%%~i" "!name!%%~xi"
rem 如果不想保留扩展名则把上一句改成:ren "%%~i" "!name!"
)
echo All Done
pause & exit

楼上的虽然是九级。。但是我的代码兼容任意扩展名。。还请lz测试后再做决定。
而且ls的cd在别的盘符不管用(如果批处理在c:盘,而目标文件夹在d:盘则cd不过去)
参考技术A 这个bat不要放在要处理的文件夹内,否则批处理本身也会被改成000X。
路径和文件后缀你写。

@echo off
setlocal enabledelayedexpansion
::Tpath=目标文件夹路径
set Tpath=D:\Backup\Desktop\New folder\
set /a num=1
for /f "delims=" %%i in ('dir "%Tpath%" /aa/b')do (
cd "%Tpath%"
::下面需自行修改文件后缀,如"000!num!.txt"、"000!num!.jpg"。
ren "%%i" "000!num!"
set /a num+=1)
exit
参考技术B @echo off
setlocal enabledelayedexpansion
for /d %%a in (*) do (
set n=10000
for /f "delims=" %%i in ('dir /b /a-d "%%a\*.*"') do (
set /a n+=1
ren "%%a\%%i" "!n:~1!%%~xi"
)
)

这么小儿科的问题。10分儿拿来 不谢

.bat 用于批量重命名以增加 fname 中的数字

【中文标题】.bat 用于批量重命名以增加 fname 中的数字【英文标题】:.bat for batch rename to increment numbers in fname 【发布时间】:2011-09-13 10:04:46 【问题描述】:

我有一个 .cbr 的大文件夹,我正在按问题编号重命名它们以正确排序它们。我需要在 ren 行中包含什么才能让每个文件通过 Windows 命令提示符增加文件名中的数字?我会经常这样做,所以我会把它做成一个 .bat 文件。

例如,其中 n = 初始数字,m = 最终数字:n.cbr, (n+1).cbr, ..., (m-1).cbr, m.cbr

.bat 到目前为止:

ren *.cbz *.cbr
ren *.cbr <increment numbers n through m>.cbr

或者,我如何修剪每个文件名,以便在扩展名之前只留下数字? (从 issue1.cbr 到 1.cbr)通过 .bat 或脚本主机文件?

【问题讨论】:

你说你正在重命名它们“...按问题编号...”脚本如何知道哪个文件应该有哪个编号?通过查看 .cbr 文件中的元数据?我认为您不会纯粹使用批处理脚本来做到这一点。 啊,如果我不打算每次都更改 .bat 就好了。首先,假设我每次想指定一个新的范围 n 到 m 时都会编辑 .bat。如果您有建议在文件组中找到最小数量和最大数量,然后将其设置为 n 到 m,请告诉我(会更好,但我从未做过类似的事情) @werdnanoslen:但即使在一个批次中,您也无法保证 Windows 处理 *.cbr 通配符的顺序,因此您实际上会在该范围内为文件随机命名。 真的吗?我不知道。好的,我在原始问题的末尾添加了一些内容,如果文件名中没有其他数字,这应该是一个不错的解决方法 另外,只是好奇,计算机喜欢如何命令其操作?批量订单通常如何下降? 【参考方案1】:

试试这个批处理脚本。

@echo off
setlocal enabledelayedexpansion
set /a count=0
for /f "tokens=*" %%a in ('dir /b /od *.cbr') do (
 echo ren "%%a" !count!.cbr
 set /a count+=1
)

它使用增量计数器重命名所有文件。文件的顺序通过DIR 命令的/OD 选项保留,该选项按修改后的时间戳对文件列表进行排序。

经过仔细测试,删除ECHO命令。

如需更多信息,请阅读HELP DIRHELP SETHELP FOR

【讨论】:

【参考方案2】:
:: REN-sec.cmd ==> Rename files to increment numbers
:: Inspired on -> http://***.com/questions/6322329#6324312
:: - (cX) 2017 adolfo.dimare@gmail.com
:: -> CAVEAT: Works on CURRENT directory!
:: - Tested on Win10 64bits
@echo off

if (%1)==()   goto _help
if (%1)==(/?) goto _example

setLOCAL EnableDelayedExpansion
rem            EnableExtensions
if (%1)==(/r) goto _recursive
if (%1)==(/R) goto _recursive
goto _current_dir

:_recursive
for /d %%A in (*.*) do (
      cd "%%~A"
      call %~dpnx0 %1 %2 %3 %4
      rem echo returning -^> call %~dpnx0 %1 %2 %3 %4
      cd ..
)
shift
goto _current_dir

:_current_dir
set /a _count=0
for %%A in (%1) do (
    set /a _count+=1

    rem Execute several times to rename 'crazy' left overs...
    FOR /L %%C IN (1,1,2) DO (
        if exist "%~2!_count!%~3%%~xA" call :skip_count %1 %2 %3 %AA
        if exist "%%~A" if not exist "%~2!_count!%~3%%~xA" ren "%%~A" "%~2!_count!%~3%%~xA"
    )
    if exist "%%~A" echo EXISTS "%%~A"
    REM if not exist "%~2!_count!%~3%%~xA" echo MISSING %~2!_count!%~3%%~xA
)
goto _out

:skip_count
    set /a _count+=1
    if exist "%~2!_count!%~3%%~x4" goto skip_count
goto _out

:_example
echo.
echo %0 USAGE EXAMPLE
echo.
echo X:\Dir\SubDir\^> dir /b
echo etc.
echo La La La.mp3
echo Le Le Le.mp3
echo Lo Lo Lo.mp3
echo Other.txt
echo.
echo X:\Dir\SubDir\^> %0 *.mp3 "" " - Su Fix"
echo.
echo X:\Dir\SubDir\^> dir /b
echo etc.
echo 1 - Su Fix.mp3
echo 2 - Su Fix.mp3
echo 3 - Su Fix.mp3
echo Other.txt
echo.

:_help
echo Rename files to increment numbers
echo.
echo CAVEAT: Works only in CURRENT directory!
echo.
echo %0 [/r] *.ext [prefix] [sufix]
echo:  /?          Help screen
echo   /r          Recurse in directories
echo   *.ext       Simple wildcard (like *.mp3) [NOT *.a.txt]
echo   prefix      Prefix to rename number
echo   sufix       sufix to rename number
echo.
echo When "" is used as prefix no prefix is put before the increment number
echo.
echo X:\Dir\SubDir\^> %0 [/r] [wildcard] [prefix] [sufix]
goto _out

:_out
:: REN-sec.cmd ==> End of file

【讨论】:

CAVEAT:适用于当前目录! 更改文件扩展名使用***.com/questions/17658354/#26438915 Bug:重命名结果将是 1 3 5 7 9。您应该删除循环中的第一个 set /a _count+=1 以防止增加两次。 同时您可能希望将_count的初始值修改为1,即set /a _count=1

以上是关于求BAT或者VBS脚本,批量重命名一个文件夹下面的文件为0001 、0002、0003、0004、0005、依次等等的主要内容,如果未能解决你的问题,请参考以下文章

Windows系统下批量重命名文件(bat命令版本)

bat批处理:根据文本文件批量重命名文件

bat批量重命名文件

bat批量重命名文件(在子文件夹里)

bat脚本照片复制重命名?

bat批量重命名(指定替换字符)