Batch file 使用7zip和批处理文件搜索多个压缩文件,如果找到结果,则执行soemthing

Batch file 使用7zip和批处理文件搜索多个压缩文件,如果找到结果,则执行soemthing,batch-file,command-line-interface,7zip,Batch File,Command Line Interface,7zip,我正在努力 在多个zip文件中搜索特定文件名 如果找不到文件名,请将所述zip文件移动到另一个文件夹 在不提取内容的情况下执行搜索 使用batch和7zip实现这些结果。 为了简单起见,我试图避免、推送、延迟扩展、setlocal、usebackq、delims或令牌,但是如果有必要,请使用它们。我会将output\u dir的值更改为您实际放置缺少所需文件的zip文件的位置,并将prog_7z更改为实际安装了7-zip的位置 将包含所有子文件夹的文件夹作为参数传递给脚本,或者将该文件夹拖动到脚

我正在努力

在多个zip文件中搜索特定文件名 如果找不到文件名,请将所述zip文件移动到另一个文件夹 在不提取内容的情况下执行搜索 使用batch和7zip实现这些结果。 为了简单起见,我试图避免、推送、延迟扩展、setlocal、usebackq、delims或令牌,但是如果有必要,请使用它们。我会将output\u dir的值更改为您实际放置缺少所需文件的zip文件的位置,并将prog_7z更改为实际安装了7-zip的位置

将包含所有子文件夹的文件夹作为参数传递给脚本,或者将该文件夹拖动到脚本上

脚本的主要部分是最后一行,您将7z.exe l filename的输出传递给findstr,并搜索存储在%target_filename%中的内容,然后使用| |表示如果errorlevel不是0,则将该文件移动到另一个目录

@echo off
set "output_dir=%USERPROFILE%\Desktop\output_files"
set "prog_7z=E:\software\7-zip\7z.exe"
set "target_filename=coolname.txt"

if "%~1"=="" (
    echo USAGE: ZipSorter.bat ^<input_folder^>
    exit /b
) else (
    set "root_input_dir=%~1"
)

for /r "%root_input_dir%" %%A in (*.zip) do (
    %prog_7z% l "%%A" | findstr /C:"%target_filename%" || move "%%A" "%output_dir%"
)

我最终采纳了Dark的理念,将其彻底摧毁,并使其发挥作用。谢谢你的帮助

for /r "%cd%" %%a in (*.zip) do (
    "c:\Program Files\7-Zip\7z.exe" l "%%a" | findstr /i ".filename.jpg .filename.jpeg" 
    if errorlevel 1 robocopy "%cd%" "%cd%\notfound" "%%~nxa" /mov >nul & echo moved
)
对于未初始化的用户,请注意。这不是在搜索.filename.jpeg。它正在搜索任何包含单词filename和jpg或jpeg的文件。findstr使用。句号是通配符lol。真是让人头疼。但现在已经足够近了


另外,我选择了robocopy,因为它可以创建不存在的文件夹。Cleaner然后使用makedir和rd处理文件夹创建。

您已经编写了一些代码,但没有说明遇到的问题是什么。只要看一眼,我就知道您需要将from语句与else语句放在同一行上,但我不知道您还遇到了哪些其他问题。if else的语法用法已明确定义,并在帮助文件中显示了如何使用它的示例。打开cmd提示符并键入IF/?读取帮助时,无论是否找到文件,l.7z似乎都会将errorlevel返回为0。我不熟悉7z,但听起来您可能需要将输出传输到findstr以检测它是否找到文件。实际上,我在客户端的自动化过程中使用Winzip做了一些非常类似的事情。我唯一的想法是7zip没有写入标准输出,而是直接写入FINDSTR无法解析的控制台。我将其压缩以进行测试并运行,它移动了一切lol。所以我想我需要花更多的时间测试*.zip do c:\Program Files\7-zip\7z.exe l%%A | findstr/c:cover.*| move%%A%cd%/tmp中的/r%cd%%A,不要在findstr位使用通配符。我只能保证我发布的代码是有效的;如果你去换东西,我不能保证。
for /r "%cd%" %%a in (*.zip) do (
    "c:\Program Files\7-Zip\7z.exe" l "%%a" | findstr /i ".filename.jpg .filename.jpeg" 
    if errorlevel 1 robocopy "%cd%" "%cd%\notfound" "%%~nxa" /mov >nul & echo moved
)