将除 FOR 输出之外的所有内容放在一行上很容易。您只需要使用动态 %TIME% 和 %DATE% 变量而不是 TIME 和 DATE 命令
@echo off
echo %time% "--" %date% -I- Purging
FORFILES /P "D:\Logs" /M *.log /D -90 /C "cmd /c echo @file @fdate"
rem FORFILES that will purge the files
如果您还希望文件名出现在同一行,那么您可以使用 EitanT 建议的临时变量。但这将文件的数量限制在最大 8191 可变大小的范围内。要处理无限数量的文件,您可以改用 SET /P。似乎不需要 FOR /F 语句,但是没有它我无法解决引用问题。
@echo off
<nul (
set/p="%time% -- %date% -I- Purging "
for /f "delims=" %%A in (
'FORFILES /P "D:\Logs" /M *.log /D -90 /C "cmd /c echo @file @fdate"'
) do set/p="%%A "
)
rem FORFILES that will purge the files
没有理由不在列出文件的同时清除文件。由于 FORFILES 非常慢,因此在同一命令中清除和列出会更有效。
@echo off
<nul (
set/p="%time% -- %date% -I- Purging "
for /f "delims=" %%A in (
'FORFILES /P "D:\Logs" /M *.log /D -90 /C "cmd /c del @path&echo @file @fdate"'
) do set/p="%%A "
)
2015-01-06 更新
我想出了一个不使用 FOR /F 的解决方案。我使用 0x22 将 SET /P 提示符括在引号中,并使用 FINDSTR 消除 FORFILES 在任何请求的输出之前写入的空行。
@echo off
<nul (
set/p="%time% -- %date% -I- Purging "
forfiles /p "d:\logs" /m *.log /d -90 /c "cmd /c del @path&set/p=0x5e0x22@file @fdate 0x5e0x22"'|findstr .
)