stackoverflow的长期粉丝,第一次发帖。 我试着找了将近一个小时,却找不到类似的问题。
这就是我所拥有的;
在基于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\"
答案 0 :(得分:1)
这是一个编辑:
这个脚本应该做你想要的。
仅更改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