2014-10-30 153 views
0

我想編寫一個批處理文件,我有如下命令:重定向CMD輸出,而不日誌

encrypt.bat -g firstSeed > C:\MyWorkingDir\key.txt 

此命令創建文件key.txt(它不存在以前),包含像字符串

2014-10-30 11:52:51,430 INFO [main] security.EncryptionUtil main (EncryptionUtil.java:304) - 45aa826df39cd1b4 

現在的問題是,我想文件key.txt只包含字符串45aa826df39cd1b4。我的意思是,沒有日誌信息。 有沒有這樣做的方法?

在此先感謝。

回答

0

假設的空間(或標籤)分隔的「字」的數量是恆定的:

for /f "tokens=9" %%A in ('encrypt.bat -g firstSeed') echo %%A>"C:\MyWorkingDir\key.txt" 
1

如果你知道命令的輸出不會改變,關鍵是在第9個非空白元素字符串,最簡單的解決方案將是

@echo off 
    setlocal enableextensions disabledelayedexpansion 
    for /f "tokens=9" %%a in ('encrypt.bat -g firstSeed') do (>"C:\MyWorkingDir\key.txt" echo(%%a) 

如果線路的格式可以改變,最好是先讀取數據,然後把它分解

@echo off 
    setlocal enableextensions disabledelayedexpansion 
    for /f "delims=" %%a in ('encrypt.bat -g firstSeed') do set "line=%%a" 
    for %%a in ("%line: =" "%") do if not "%%~a"=="" set "key=%%~a" 
    >"C:\MyWorkingDir\key.txt" echo(%key% 

在這兩種情況下,for /f命令都會執行encrypt.bat命令並檢索輸出。

在第一種情況下,我們只對線條中的第9個元素感興趣(默認情況下分隔符是製表符和空格)。

在第二種情況下,實線被放回並存儲在一個變量中。然後變量被「引用」,其中的每個空間被替換爲" ",因此,初始完整字符串中的每個元素現在都是帶引號的字符串,每個元素之間用空格隔開,並且for將遍歷此列表存儲值進入%key%變量。當變量被覆蓋時,最終的值是必需的元素。