批处理脚本中的直观文件排序?

时间:2016-08-24 01:57:03

标签: batch-file windows-7 batch-processing

所以在Windows资源管理器中,我将这些文件排序如下:

enter image description here

我有这个脚本删除括号和一个零,如果尾随数大于或等于10,删除两个零:

MS_TableConnectionString

然而,一旦我运行代码,我得到了这个结果:

enter image description here

因此,批处理文件不会像Windows资源管理器那样“直观地”浏览文件。有没有办法改变这个?或者是否有更好的方法来重命名这些文件?

2 个答案:

答案 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命令,以便实际重命名文件。