尝试了很多方法来做到这一点,但并没有给我任何接近我的要求。
请帮助和指导。
我想要做的是运行批处理文件,从文件名末尾的页码中删除前导零。 (_0101)
档案名称= 05-10-2012#MilitaryPkk-#Books ** _ 0101 **。Pdf
_0101更改为101
我正在寻找的输出是(连字符)之后的页码 - 新文件名= 05-10-2012#MilitaryPkk-101#Books.Pdf
输入文件始终带有(下划线)_
的前缀因此0101变为101或090变为90,01变为1。 正如您所看到的那样,它将是文件名中的4个,3个或2个数字。
文件到达文件夹时需要更改。
我开始查看位数的数字计数,但不确定是否最好的方法是暂时的建议非常受欢迎。
由于
JH
答案 0 :(得分:0)
试试这个:
@echo off
setlocal enabledelayedexpansion
for /f "tokens=1-3 delims=#" %%a in ('dir /b /a-d *_0*.pdf') do (
set orig=%%a#%%b#%%c & set pre=%%a#%%b
for /f "tokens=1-3 delims=_." %%d in ("%%c") do (
set "str=%%d" & set "str2=%%e" & set "str2=!str2:_=!"
Call :StripLeading0 !str2! ret
set "newfile=!pre!!ret!#!str!.%%f"
)
)
set "filename=!newfile!"
echo %filename%
exit /b
:StripLeading0 <input> <return>
setlocal
FOR /F "tokens=* delims=0*" %%A IN ("%1") DO SET Var=%%A
endlocal & set %2=%Var%
答案 1 :(得分:0)
@ECHO OFF
SETLOCAL
SET "sourcedir=."
FOR /f "tokens=1*delims=_" %%a IN ('dir /b /a-d "%sourcedir%\*_0*.pdf" ') DO (
FOR /f "tokens=*delims=0" %%e IN ("%%b") DO ECHO REN "%sourcedir%\%%a_%%b" "%%a_%%e"
)
)
GOTO :EOF
您需要将目录设置为sourcedir
。我将当前目录(.
)设置为进行测试。
为了测试目的,所需的REN命令仅为ECHO
。 在您确认命令正确后,将ECHO REN
更改为REN
以实际重命名文件。
答案 2 :(得分:0)
@echo off
setlocal enableextensions disabledelayedexpansion
set "folder=%cd%"
for %%z in ("%folder%\*_0*.pdf"
) do for /f "tokens=1-3 delims=#" %%a in ("%%~nz"
) do for /f "tokens=1,* delims=_" %%d in ("%%~c"
) do for /f "tokens=* delims=0" %%f in ("%%~e"
) do echo ren "%%~fz" "%%~a#%%~b%%~f#%%~d%%~xz"
endlocal
for
循环是:
%%z
遍历文件
%%a
- %%c
由#
%%d
- %%e
由下划线拆分的文件名的最后一个“部分”
%%f
删除了前导0的页码
当然,假设#
是分隔符,并且在文件名的最后“部分”中,唯一的下划线是页码的分隔符。在其他条件下,应该修改代码。