我需要在文件夹内的每个*.lnk
文件中插入一个后脚本。 我在这里找到了一些代码并修改了它们以达到我的目标,但由于某种原因,我使用的每个代码都不止一次地添加后脚本:
for /f %f in ('dir /b "C:Test*"') do ( cd "%i" & ren *.lnk ??????????????????????????????????????????????????????-18.* )
上面一行的结果将是该文件夹中的每个*.lnk
文件都将重命名为:
example-18-18-18-18-18-18-18-18-18-18-18-18.lnk
期望的结果是:example-18.lnk
原始文件名为:example.lnk
关于我做错了什么的任何线索?
好吧,我很确定您在目录中有 12 个项目C:Test
,对吧?因为似乎同一个文件example.lnk
连续重命名了 12 次......
无论如何,您的代码中存在几个问题:
- 您有一个
for /f %f
循环,但您使用的是%i
而不是在循环体中; for /f
循环与dir
一起解析通配符(*
,?
),但您也在循环体中指定了通配符,这就是为什么同一个文件一次又一次地重命名;- 将
cd
命令移到循环前面,提前更改一次工作目录; -
字符;编辑:现在我明白了为什么您使用?
字符的序列是完全没有用的,只需放置一个*
?
字符序列(与.
不匹配)而不是单个*
字符(匹配所有字符),*-18.*
因为这会导致字符串-18
附加到扩展.lnk
后面; 但是, 为了防止这种情况,您可以使用~
修饰符,例如%~nf-18%~xf
或%~nf-18.*
;
那么这个呢:
cd /D "C:Test" && for /F "delims= eol=|" %f in ('dir /B /A:-D "*.lnk"') do ren "%f" "%~nf-18.*"
这样做:
- 更改(
cd
)到工作目录C:Test
,即使从不同的驱动器(/D
); - 仅在成功的情况下执行以下命令(
&&
); - 让
dir
将所有扩展名为.lnk
的文件(/A:-D
)作为裸列表(/B
)返回
; for /F
逐行解析列表,不拆分文件名(delims=
)或忽略任何(eol=|
);- 重命名(
ren
)每个文件(由%f
引用),以便-18
附加其原始基名(%~nf
)并保留原始扩展名(尾随.*
);