所以在Windows资源管理器中,我将这些文件排序如下:
我有这个脚本删除括号和一个零,如果尾随数大于或等于10,删除两个零:
MS_TableConnectionString
然而,一旦我运行代码,我得到了这个结果:
因此,批处理文件不会像Windows资源管理器那样“直观地”浏览文件。有没有办法改变这个?或者是否有更好的方法来重命名这些文件?
答案 0 :(得分:0)
这使用了不同的方法:
@echo off
cd C:\folder
setlocal enabledelayedexpansion
SET /A COUNT=0, REMOVE=2
for /F "delims=(" %%a in ('dir /B *.jpg') do (
SET /A COUNT+=1
ECHO !COUNT!
set "f=%%a"
IF !COUNT! EQU 10 SET "REMOVE=3"
for /F %%r in ("!REMOVE!") do set "f=!f:~0,-%%r!"
ren "%%a" "!f!!COUNT!.jpg"
)
pause
答案 1 :(得分:0)
这是一种不依赖于文件系统使用的排序顺序的方法,保留原始文件名中出现的数字。
对于每个文件名(例如,test_this_01 SELR_Opening_00000 (1).jpg
),检索最后一个得分_
之后的部分(00000 (1)
)。然后删除括号和空格,然后将长度修剪为五个字符(00001
)。该字符串最终替换文件名中的原始字符串(test_this_01 SELR_Opening_00001.jpg
);文件名不得多次包含被替换的部分(00000 (1)
)(因此不应出现这样的文件名:test_this_00000 (1) SELR_Opening_00000 (1).jpg
):
@echo off
setlocal DisableDelayedExpansion
rem // Define constants here:
set "LOCATION=."
set "PATTERN=*_* (*).jpg"
set /A "DIGITS=5"
pushd "%LOCATION%" || exit /B 1
for /F "usebackq eol=| delims=" %%F in (`
dir /B /A:-D /O:D /T:C "%PATTERN%"
`) do (
set "FILE=%%F"
setlocal EnableDelayedExpansion
set "LAST="
for %%I in ("!FILE:_=","!") do (
set "LAST=%%~nI" & set "FEXT=%%~xI"
set "FNEW=!FILE:%%~I=!"
)
set "LAST=!LAST:(=!" & set "LAST=!LAST:)=!"
set "LAST=!LAST: =!" & set "LAST=!LAST:~-5!"
ECHO ren "!FILE!" "!FNEW!!LAST!!FEXT!"
endlocal
)
popd
endlocal
exit /B
根据需要调整脚本顶部的目录位置和文件搜索模式。
完成测试后,删除大写的ECHO
命令,以便实际重命名文件。