[英]How to concatenate command outputs of a Windows batch file
我正在編寫一個Windows批處理文件,它將清除超過90天的日志。 如何連接命令的輸出以使它們出現在一行中? 我還想稍后將此輸出附加到文件中。 到目前為止我的批處理文件是:
@echo off
time /t && echo "--" && date /t && echo " -I- Purging " && FORFILES /P "D:\Logs" /M *.log /D -90 /C "cmd /c echo @file @fdate"
rem FORFILES that will purge the files
這個輸出:
12:08
--
14/08/2012
-I- Purging
"<filename>" 02/08/2012
"<filename>" 30/07/2012
如何連接這些輸出? 謝謝。
將所有內容放在除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 .
)
如果要連接輸出中的行,可以將CMD_STR
設置為所需的命令,並使用for /f
循環,如下所示:
@echo off
setlocal enabledelayedexpansion
set "CMD_STR=time /t && echo "--" && date /t && echo " -I- Purging " && FORFILES /P "D:\Logs" /M *.log /D -90 /C "cmd /c echo @file @fdate""
set CONCAT_STR=
for /f %%i in ('%CMD_STR%') do set "CONCAT_STR=!CONCAT_STR! %%i"
echo !CONCAT_STR!
循環遍歷輸出行,並將它們逐個附加到CONCAT_STR
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.