本帖最后由 consatan 于 2011-4-30 10:32 编辑
WINDOWS的补丁命名(从官网下)一般是
WindowsXP-KB12345-x86-CHS.exe
但有的并不是这格式,如
WindowsXP-KB2345-v2-x86-CHS.exe
或
WindowsXP-WindowsMedia-KB456789-v2-x86-CHS.exe
我想实现
将KB补丁都统一放在一个目录下,然后将它们批量重命名为
KB8位数字.exe
比如
WindowsXP-KB12345-x86-CHS.exe
希望重命名为
KB00012345.EXE
因为DIR无法对数字进行排序,比如234.exe会排在34.exe之前,所以要把它们都补齐8位数字
我的思路是- @echo off && setlocal enableDelayedExpansion
- set "folderpath=C:\UPDATE\"
- set "tempfile=%TEMP%\updatefilelist.tmp"
- set "renbat=%folderpath%renbat.bat"
-
- dir %folderpath%*.exe /W/B/A-D>%tempfile%
- echo @echo off>%renbat%
- echo cd /d %folderpath%>>%renbat%
-
- for /f "tokens=*" %%a in (%tempfile%) do (
- set fname=%%a
- set fname=!fname:*-KB=KB!
- set fname=!fname:~0,9!
- if "!fname:~-1!"=="-" (
- set "fname=KB00!fname:~2,-1!.exe"
- ) else (
- set "fname=KB0!fname:~2!.exe"
- )
- echo ren "%%a" "!fname!">>%renbat%
- )
- del /f/q %tempfile%
-
- call %renbat%
复制代码 但这方法没有实现
文件名中没有KB字样,则不重命名
我下载的文件,KB后面至少带6个数字,如果是遇到带5个或者更少,或者8、9个数字的,那这方法也无法变通
如果是正则表达式的话,倒是可以用捕获组来实现复制代码 为了便于测试,下面是我C:\UPDATE下的文件列表
WindowsXP-KB898461-x86-CHS.exe
WindowsXP-KB951376-v2-x86-CHS.exe
WindowsXP-WindowsMedia-KB973540-x86-CHS.exe
WindowsXP-WindowsMedia-KB954155-x86-CHS.exe
WindowsXP-WindowsMedia-KB952069-v2-x86-CHS.exe
WindowsXP-WindowsMedia-KB978695-x86-CHS.exe
WindowsXP-WindowsMedia-KB975558-x86-CHS.exe
WindowsXP-KB980436-x86-CHS.exe
WindowsXP-WindowsMedia-KB2378111-x86-CHS.exe
WindowsXP-KB982132-x86-CHS.exe
WindowsXP-KB2412687-x86-CHS.exe
windows-kb890830-v3.18.exe
IE8-WindowsXP-KB2510531-x86-CHS.exe
WindowsXP-KB970430-x86-CHS.exe |