如何替换 FOR 命令中的文本?

如何替换 FOR 命令中的文本?

在写我的另一个问题(现在我已删除)时受到了启发(有时和鸭子说话确实有帮助)我想我找到了解决问题的方法,但我不知道如何去做。

我在批处理脚本中有以下命令

FOR /R %1 %%G IN (*) DO rdiff.exe signature "%%G" | 7za.exe a -mx0 -si"%%G" signatures.7z

我想要做的是删除7zip 参数中%1的文本但将其保留在 rdiff 参数中。%%G-si

我该如何做呢?

答案1

%1在命令提示符中操作字符串非常麻烦。从开头删除的内容%G需要计算字符数%1(循环遍历字符并将计数器加一),然后使用子字符串语法(%var:~start,length%)。

使用福尔菲斯应该简单得多,因为它有一个内置命令变量来访问文件的相对路径(@relpath)。

这应该有效:

forfiles /S /P %1 /C "cmd /V:on /C if @isdir==FALSE set R=@relpath&set R=!R:~3,-1!&%~dp0rdiff signature @path | %~dp07za a -mx0 -si\"!R!\" %~dp0signatures.7z"

细节:

  • /S使 forfiles 递归。

  • /P %1指定路径。

  • /C "cmd /V:on /C ...在具有延迟变量扩展(语法)...的子 shell 中执行。!var!

  • if @isdir==FALSE检查文件(而不是目录)是否存在。

  • set R=@relpath将相对路径存储在名为的变量中R

  • set R=!R:~3,-1!删除开头的字符串"\."和尾随的双引号。

  • %~dp0forfiles 更改目录来执行命令,指定%~dp0运行批处理文件的绝对路径。

相关内容