使用 cmd 代码将后脚本添加到 *.lnk 文件,无法按预期工作



我需要在文件夹内的每个*.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)并保留原始扩展名(尾随.*);

最新更新