使用cmd代码将后脚本添加到* .lnk文件中无法正常工作

时间:2019-07-17 11:51:42

标签: cmd

我需要在文件夹内的每个*.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

关于我在做什么错的任何线索?

1 个答案:

答案 0 :(得分:1)

好吧,我很确定您在目录C:\Test中有12个项目,对吗?因为似乎同一文件example.lnk连续重命名了12次……

无论如何,您的代码中存在几个问题:

  • 您有一个for /f %f循环,但是您正在使用%i而不是在循环正文中;
  • for /f循环与dir一起解析wildcards*?),但是您也在循环正文中指定了这就是为什么同一文件一次又一次重命名的原因;
  • 在循环前面移动cd命令以预先更改工作目录;
  • ?个字符的序列完全没有用,只需放置一个*个字符; 编辑:现在我明白了为什么你使用?个字符(不匹配.)的序列,而不是单个*个字符(匹配所有字符),因为*-18.*会导致附加到扩展名-18后的 后面的字符串.lnk上;但是,为防止这种情况,您可以使用~-modifiers,例如%~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.*"

这样做:

  • 甚至从另一个驱动器(C:\Test)更改(cd)到工作目录/D
  • 仅在成功(&&)的情况下执行以下命令;
  • dir返回所有扩展名为/A:-D的文件(.lnk)作为裸列表(/B);
  • for /F逐行分析列表,而不拆分文件名(delims=)或忽略任何文件名(eol=|);
  • 重命名(ren)每个文件(由%f引用),以便其原始基本名称(%~nf)附加-18并保留原始扩展名(尾随.*);