在多个zip归档文件中搜索字符串。

7

以下是我拥有的信息:

在一个基于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\" 

1
我猜这不是真正的DOS,而是在某些Windows下的命令提示符,对吗? - Victor - Reinstate Monica
你需要在将字符串保存到export.txt后删除每个解压缩的文件吗?另外,删除你的问题中的dos标签,并添加与Cmd相关的标签。 - sambul35
@sambul35 如果它能够删除就好了,但如果不能也不是世界末日。我最困扰的是编写一个for语句,可以进入每个解压缩的文件夹,搜索字符串并保存export.txt。 - Patrick
仅提取字符串而不删除该字符串周围的所有行是否可行? - Jonas
@Patrick,请查看编辑 - Jonas
1个回答

0

这是一个编辑:

这个脚本应该可以做到你想要的。

只需更改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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接