在写我的另一个问题(现在我已删除)时受到了启发(有时和鸭子说话确实有帮助)我想我找到了解决问题的方法,但我不知道如何去做。
我在批处理脚本中有以下命令
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!
删除开头的字符串"\."
和尾随的双引号。%~dp0
forfiles 更改目录来执行命令,指定%~dp0
运行批处理文件的绝对路径。