我需要一个批处理脚本来从文件名中删除前导零

时间:2014-02-28 21:54:22

标签: regex batch-file

尝试了很多方法来做到这一点,但并没有给我任何接近我的要求。

请帮助和指导。

我想要做的是运行批处理文件,从文件名末尾的页码中删除前导零。 (_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

3 个答案:

答案 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#

  • 分隔的文件名中的“section”标记
  • %%d - %%e由下划线拆分的文件名的最后一个“部分”

  • %%f删除了前导0的页码

当然,假设#是分隔符,并且在文件名的最后“部分”中,唯一的下划线是页码的分隔符。在其他条件下,应该修改代码。

相关问题