2016-08-02 113 views
5

長時間使用stackoverflow,第一次發佈。 我試圖搜索近一個小時,找不到類似的問題。在多個zip文檔中搜索字符串

這是我的;

在基於Windows的Web服務器上,大約有1,000個zip文件,每個文件都有幾十個日誌文件。我已經有一個腳本通過每個存檔並刪除除一個特定文件類型以外的所有文件(嘗試保存磁盤空間並刪除我不需要的東西)。然後,該腳本將每個存檔解壓到他們自己的文件夾。而且我知道如何編寫相反的代碼,以便在完成後將其壓縮。

這是我需要弄清楚的;

一旦我運行前面提到的腳本(我們稱之爲垃圾人,因爲它清除了zip文件中的垃圾),我需要瀏覽每個新創建的解壓縮文件夾中剩餘的5或6個文件,爲每個文件中的特定字符串。如果找到字符串,我刪除所有不是該字符串的內容,並將其保存到該文件夾​​中名爲「export.txt」的文件中。然後,我轉到下一個解壓縮文件,依此類推。一旦完成,我需要重新將所有文件重新壓縮到自己的檔案中

這是我到目前爲止的代碼。任何幫助非常感謝。

cd "C:\Program Files\7-Zip" 
FOR %%c in (C:\Users\xxxxxx\Desktop\LogQueue\*.*) DO 7z d %%c "-x!xstore*" -r 


FOR /R "C:\Users\xxxxxx\Desktop\LogQueue" %%I in ("*.zip") do (
    "%ProgramFiles%\7-Zip\7z.exe" x -y -o"%%~dpnI" "%%~fI" 
) 

cd "C:\Users\xxxxxxx\Desktop\LogQueue" 

FOR /R "C:\Users\xxxxxx\Desktop\LogQueue" %%I in ("*.*") do (
    findstr "xxxxxxxx_eReceipt" %%~fI > %%~dpnI\export.txt 
    pause 
) 

for /d %%X in (*) do "c:\Program Files\7-Zip\7z.exe" a "%%X.zip" "%%X\" 
+1

我想這不是真的DOS,而是一些Windows下的命令提示符,對嗎? – Victor

+0

您是否需要在將字符串保存到'export.txt'後刪除每個解壓縮的文件?另外,從你的問題中刪除dos標籤,並添加Cmd相關。 – sambul35

+0

@ sambul35如果它刪除了,那將會很好,但如果不是這樣的話,它不會是世界末日。我遇到的最大的事情是寫一個for語句,將進入每個解壓縮文件夾,搜索字符串,並保存export.txt。 – Patrick

回答

1

這是一個編輯:

這個腳本應該做你想要什麼。

僅變化sourcedirmystring變量。

export.txt將位於批處理的根目錄中名爲Storage的文件中。

:ScriptA 
@ECHO ON 
MKDIR "%CD%\Storage" 
MKDIR "%USERPROFILE%\Desktop\Outx" 
GOTO :ScriptB 

:ScriptB 
::REM ONLY CHANGE 
SET "sourcedir=%USERPROFILE%\Desktop\Test" 
FOR /R "%sourcedir%\" %%a in (*.txt) do copy "%%a" "%CD%\Storage" 
:ScriptC 

:ScriptC 
@ECHO OFF 
SETLOCAL 
SET "VARA=%CD%\Storage" 
SET "VARB=%USERPROFILE%\Desktop\Out" 
::REM ONLY CHANGE 
SET "mystring=PUT_STRING_HERE" 
FOR %%a IN ("%VARA%\*.txt") DO FINDSTR "%mystring%" "%%a">nul&IF NOT ERRORLEVEL 1 FINDSTR "%mystring%" "%%a">"%VARB%\%%~nxa" 
DEL /F "%CD%\Storage\*.txt" 
GOTO :ScriptD 

:ScriptD 
@ECHO ON 
COPY /B "%USERPROFILE%\Desktop\Outx\*.txt" "%CD%\Storage\export.txt" 
RD /S /Q "%USERPROFILE%\Desktop\Outx" 
goto :eof