这是我的;
在基于 Windows 的 Web 服务器上,大约有 1,000 个 zip 文件,每个文件中包含数十个日志文件。我已经有了一个脚本,它遍历每个存档并删除除一种特定文件类型之外的所有文件(试图节省磁盘空间并删除我不需要的东西)。然后,脚本将每个存档解压缩到它们自己的文件夹中。而且我知道如何编写相反的代码,以便在我完成后将它们压缩回去。
这是我需要弄清楚的;
一旦我运行了前面提到的脚本(我们称它为 garbageman,因为它清除了 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\"
最佳答案
这是一个编辑:
这个脚本应该做你想做的事。
仅更改 sourcedir
和 mystring
变量。
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
关于windows - 在多个 zip 文件中搜索字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38729638/