重命名多个文件名

时间:2017-10-22 01:50:18

标签: batch-file

我想问一下如何识别文件名的字符串长度

这是怎么回事

我有几个w / c文件,下面列出了文件名

557531_S_10CG_Layout-1

557531_S_10CG_Layout-2

557531_S_10CG_Layout-3

,输出必须是

557531_S_1

557531_S_2

557531_S_3

字符串 10CG_Layout - 应该已被删除。但是代码应该从头开始识别w / c是 557531_S ,最后一个w / c是数字。

这是我的代码

::Change the *.pdf*
for %%f in (*.pdf*) do call :rename "%%f"

goto :eof

:rename
set var=%~n1
set var1=%~x1
::Change the 10 (start) and -1 (end)
ren %1 %var:~0,10%%var1%

但输出只是

557531_S _

请告知

感谢

2 个答案:

答案 0 :(得分:0)

@ECHO OFF
SETLOCAL
SET "sourcedir=U:\sourcedir"

::Change the *.pdf*
for %%f in (%sourcedir%\*.pdf*) do call :chgname "%%f"

goto :eof

:chgname
set var=%~n1
set var1=%~x1
::Change the 10 (start) and -1 (end)
ECHO ren %1 %var:~0,9%%var:~-1%%var1%
:: another method
set var=%~nx1

ECHO ren %1 "%var:10CG_Layout-=%"


GOTO :EOF

您需要更改sourcedir的设置以适合您的具体情况。

为了测试目的,所需的REN命令仅为ECHO在您确认命令正确后,将ECHO REN更改为REN以实际重命名文件。

我故意更改了子例程名称,因为renameren的同义词。

您的方法使用的是来自1的{​​{1}},而不是您似乎需要的姓名的最后一个字符。报告时输出为10个字符,而不是9个字符。这些更改显而易见,但10CG_Layout-表示-1

第二种方法的公式为"%name: string = replacementstring %"

答案 1 :(得分:0)

这是一个潜在的选择:

@Echo Off
SetLocal EnableDelayedExpansion
For %%A In (*_*_*_*-*.pdf) Do Call :Sub "%%A"
Pause
Exit/B

:Sub
Set "_=%~1"
Set "i=1"
Set "_%i%=%_:_="&Set/A i+=1&Set "_!i!=%"
Echo=Ren "%_%" "%_1%_%_2%_!_%i%:*-=!"
GoTo :EOF

如果输出看起来没问题,那么您可以在删除第Echo=行之前从行11中删除4