使用cmd代码向*.lnk文件添加post脚本未按预期工作

使用cmd代码向*.lnk文件添加post脚本未按预期工作,cmd,Cmd,我需要在文件夹中的每个*.lnk文件中插入一个post脚本。 我在这里找到了一些代码,并对它们进行了修改以达到我的目标,但出于某种原因,我使用的每一个代码都不止一次地添加了post脚本: for /f %f in ('dir /b "C:\Test\*"') do ( cd "%i" & ren *.lnk ??????????????????????????????????????????????????????-18.* ) 上述行的结果是,该文件夹中的每个*.lnk文件都将重

我需要在文件夹中的每个*.lnk文件中插入一个post脚本。 我在这里找到了一些代码,并对它们进行了修改以达到我的目标,但出于某种原因,我使用的每一个代码都不止一次地添加了post脚本:

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
期望的结果是:示例-18.lnk

原始文件名为:example.lnk


有没有关于我做错了什么的线索?

嗯,我很确定目录C:\Test中有12项,对吗?因为同一个文件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* 这是:

更改到工作目录C:\Test,即使是从不同的驱动器/D; 仅在成功的情况下执行以下命令; 将扩展名为.lnk的所有文件/A:-D作为裸列表/B返回; 逐行解析列表,不拆分文件名delims=或忽略任何eol=|; 重命名%f引用的每个文件,以便附加其原始基名称%nf-18,并保留原始扩展名。*;
什么是%i?对于/f%f,在'dir/b C:\Test\*'中,对C:\Test`中的每个文件和每个文件夹执行一次do之后的部分。为什么在不使用%f的情况下使用for/f%f`循环?我可以告诉您,目录C:\Test中有12项,对吗?无论如何,除了%f/%i混乱之外,还有一些问题:我要替换的序列是?单程*;然后我会将cd/D C:\Test&&放在for循环之前;然后我将dir部分更改为dir/B/A:-D*.lnk,并执行ren%f*-18.lnk…很好!差不多了!但是我正在将快捷方式重命名为Test1.lnk-18而不是Test1-18.lnk。。。我正在尝试修改您提供的代码以使其正常工作,感谢您迄今为止的解释!!好吧谢谢@aschipfl!我让它工作,不是我想象中最好的方式,但我完成了工作,尽管我必须使用的序列?而不是像你建议的那样:cd/D C:\Test&for/F delims=eol='dir/B/A:-D.lnk'do ren%F;我太专注于所有其他我没有意识到的错误?-序列的目的…现在就像一个符咒!感谢您的解释,现在我对代码的实际用途有了更好的了解:D