使用 FORFILES 命令抑制输出字符串

Suppress output string using FORFILES command

我想使用 forfiles:

忽略输出 @ftime 的秒数
forfiles /P "%userprofile%\Desktop\folder" /M "test.rar" /C "cmd /c echo sucessufull at %@ftime:~0,2%:%@ftime:~3,2%h"

尝试使用这种方式,但我认为 forfiles 不允许使用 %

forfiles的特殊@-变量,如@ftime,与普通环境变量无关,%-符号用于扩展他们。

有两种选择:

  1. for /F捕获forfiles的输出:

     for /F "tokens=1-2 delims=:" %%I in ('
         forfiles /P "%UserProfile%\Desktop\Folder" /M "test.rar" /C "cmd /C if @isdir==FALSE echo @ftime"
     ') do (
         echo successful at %%I:%%Jh
     )
    
  2. forfiles:

    内嵌套 for /F 循环
     forfiles /P "%UserProfile%\Desktop\Folder" /M "test.rar" /C "cmd /C if @isdir==FALSE for /F 0x22tokens=1-2 delims=:0x22 %%I in (0x22@ftime0x22) do echo successful at %%I:%%Jh"
    

    十六进制代码 0x22 代表引号 " 并且只有 forfiles 可以理解。

这是直接使用 命令的基本示例,以保持主题:
@ForFiles /P "%UserProfile%\Desktop\folder" /M "test.rar" /C "Cmd /V /C Set _=@FTime&Echo successful at !_:~,5!"

还有一个 complete/robust 例子:

@"%__AppDir__%forfiles.exe" /P "%UserProfile%\Desktop\folder" /M "test.rar" /C "0x22%__AppDir__%cmd.exe0x22 /V /C If @IsDir==FALSE (Set 0x22_=@FTime0x22 & Echo successful at !_:~,5!)"