2016-03-11 27 views
0

我試圖從.LOG文件中抓取文件名並將其附加到文件中每行的開頭,sans擴展名之間的空格文件名和行內容。文件夾中有許多這樣的文件,並且應該爲文件夾中的每個.LOG文件執行腳本。示例文件名看起來是這樣的:批處理腳本抓取文件名並添加到每行的開頭

20160201.log 

我想要的文件名添加到每個文件中的線,像這樣的:

00:00:23 Left 4EEFD9 6.59418mA 0.00003mA OK  
00:00:23 Right 4EEFEF 6.85377mA 0.00001mA OK  
00:00:44 Left 4EEFDC 6.32207mA 0.00004mA OK 

爲了讓這樣的結果:

20160201 00:00:23 Left 4EEFD9 6.59418mA 0.00003mA OK  
20160201 00:00:23 Right 4EEFEF 6.85377mA 0.00001mA OK  
20160201 00:00:44 Left 4EEFDC 6.32207mA 0.00004mA OK 

我看到這個問題here但它引用從文件名列表拉一個文件名,並分別在每個條目的開始放置,這樣就不會爲我工作。我也看過this question,但是因爲我需要使用文件名而不是我當前的系統時間,所以這也不起作用。我沒有任何代碼可以提供......我無法從我發現的問題中使用任何確鑿的結論,而且我對批處理腳本完全陌生。


編輯1:脫線的代碼

這裏是我試圖用脫線的答案(注意註釋是我除了用於故障排除)運行當前代碼:

@ECHO Off 
SETLOCAL 
SET "sourcedir=C:\Users\ckemmann\Desktop\Current" 
SET "destdir=C:\Users\ckemmann\Desktop\Current\New" 

::echo %sourcedir% <I check what I've assigned to sourcedir. 
::echo %destdir% <And to destdir. 
::pause 

FOR %%f IN ("%sourcedir%\*.log") DO >"%destdir%\%%~nf.out" (
FOR /f "usebackqdelims=" %%a IN ("%%f") DO (
    ECHO %%~nf %%a 
) 
) 

::pause <I catch the batch script telling me that the system cannot find the path specified. 

GOTO :EOF 

如圖所示在代碼中,我收到了來自Windows的投訴,稱它無法找到文件路徑...即使這是我從文件夾屬性中複製的文件路徑。


編輯2:

由於我沒有聽到回我的編輯1我去Arescet的答案。我可惜似乎沒有辦法解決劇本的緩慢問題。我的最終代碼與他在答案中提供的代碼相同。

+1

您是否提供了文件名,或者應該自動檢測,還是從Alpha Centauri傳入? – Magoo

+0

@Magoo - 你是指供應?我有一個包含這些.LOG文件的文件夾,我希望.bat腳本抓住每個文件的文件名,打開文件,將文件名w/o擴展名添加到每行的開頭,然後再關閉它。我將澄清這個問題以配合這個評論。 – ckemmann

+0

Magoo的答案可能會更快,因爲我有一個'ren'和一個'del'命令,但最後我們都有類似'echo%stuff%> endFile.log',正如我所提到的是罪魁禍首'slowness' – Bloodied

回答

1
@echo off 
for /r "C:\PATH TO WHEREVER\" %%G in (*.log) do (
    ren "%%~G" "reWrite.temp" 
    for /f "tokens=*" %%H in (reWrite.temp) do (
     echo %%~nG %%H >> %%~nG.log 
    ) 
    del "reWrite.temp" 
) 
pause 

這需要所有.log文件"C:\PATH TO WHEREVER\",重命名它們,並通過線寫入的文件名和數據線到原來的名字,然後在完成時刪除該文件。 @ Magoo的回答明顯超越了我的觀點,但不同的解決方案應該可以幫助你理解解決未​​來願望的不同方法。

+0

謝謝Arescet。你提供的腳本工作得很好......只有一個警告。由於我的.log文件相當長(每個文件有幾千行),批處理腳本運行速度很慢。我想知道是否有任何方法來加速這個腳本。 – ckemmann

+0

緩慢的部分幾乎肯定會寫出新的路線,我認爲這是無法避免的。 @ Magoo的回答也有這個。至少這可以在後臺運行,而不必關注它。 – Bloodied

2
@ECHO Off 
SETLOCAL 
SET "sourcedir=U:\sourcedir\t w o" 
SET "destdir=U:\destdir" 
FOR %%f IN ("%sourcedir%\*.log") DO >"%destdir%\%%~nf.out" (
FOR /f "usebackqdelims=" %%a IN ("%%f") DO (
    ECHO %%~nf %%a 
) 
) 

GOTO :EOF 

你需要改變的sourcedirdestdir設置以適合你的情況。

解碼...

採取從指定的目錄匹配「* .LOG」的文件,指定自己的名字%%f

創建在目標目錄中的新文件%%~nf .OUT。閱讀%%f%%aecho的每一行,該行以%%~nf和一些空格作爲前綴。

%%~nf表示只有%%f的名稱部分。

重定向程序>創建一個新文件,並放置在它的位置,接受echo輸出到該文件而不是正常的回顯到控制檯。

+0

我確定我在做這個錯誤...我更新了我的問題,試圖實現您的代碼,但出於某種原因,Windows對我的文件路徑並不滿意。我必須在某個地方除以0。 – ckemmann

相關問題