簡體   English   中英

如何連接Windows批處理文件的命令輸出

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM