我想问一下如何识别文件名的字符串长度
这是怎么回事
我有几个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 _
请告知
感谢
答案 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
以实际重命名文件。
我故意更改了子例程名称,因为rename
是ren
的同义词。
您的方法使用的是来自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