Batch file 分别压缩子文件夹中的文件

Batch file 分别压缩子文件夹中的文件,batch-file,cmd,7zip,zipfile,subdirectory,Batch File,Cmd,7zip,Zipfile,Subdirectory,大家好,谢谢你们的回答 首先,我试图找到问题的答案,但什么也没找到 我有一个文件夹和子文件夹树,我想使用7zip分别压缩这些文件夹中的文件 我从这个网站上获得了这段代码,它实现了我想要的功能,但它将压缩文件放在主文件夹中: set extension=.* for /R %%a in (*%extension%) do "%sevenzip%" a -mx "%%~na.zip" "%%a" 我想知道我是否能得到每个文件的zip文件,并将其放在包含源文件的子文件夹中。或者执行上

大家好,谢谢你们的回答

首先,我试图找到问题的答案,但什么也没找到

我有一个文件夹和子文件夹树,我想使用7zip分别压缩这些文件夹中的文件

我从这个网站上获得了这段代码,它实现了我想要的功能,但它将压缩文件放在主文件夹中:

    set extension=.*
    for /R %%a in (*%extension%) do "%sevenzip%" a -mx "%%~na.zip" "%%a"
我想知道我是否能得到每个文件的zip文件,并将其放在包含源文件的子文件夹中。或者执行上述过程,并将每个zip文件放入相应的子文件夹中

我尝试使用双“For/d”,但无法获得:

    cd /d %~dp0

    rem 7z.exe path

    set sevenzip=

    if "%sevenzip%"=="" if exist "%ProgramFiles(x86)%\7-zip\7z.exe" set 

    sevenzip=%ProgramFiles(x86)%\7-zip\7z.exe


    if "%sevenzip%"=="" if exist "%ProgramFiles%\7-zip\7z.exe" set 

    sevenzip=%ProgramFiles%\7-zip\7z.exe


    if "%sevenzip%"=="" echo 7-zip not found&pause&exit

    for /D %%O in (*) do (

        for /R %%I in ("%%O\*") do (
            "%sevenzip%" a -mx "%%~na.zip" "%%a"

            ::        rd /s /q "%%I"  **Because I do not want to delete anything by now.

        )
    )
再次感谢你


Alex.

如果您的文件夹结构有些复杂,那么您最好使用
目录中的普通列表:

  dir /a:-d /s /b /o
只需在
中为
使用其输出即可:

for /f %%f in ('dir /a:-d /s /b /o') do (
  echo %%f <-- %%f is a full path to a file, do something with it
)
for/f%%f in('dir/a:-d/s/b/o')do(

echo%%f这是最终代码:

@回音

cd/d%~dp0

rem 7z.exe路径

设置sevenzip=

如果“%sevenzip%”==“如果存在”%ProgramFiles(x86)%\7-zip\7z.exe“则设置sevenzip=%ProgramFiles(x86)%\7-zip\7z.exe

如果存在“%ProgramFiles%\7-zip\7z.exe”,则设置sevenzip=%ProgramFiles%\7-zip\7z.exe

如果未找到“%sevenzip%”==“echo 7-zip并暂停并退出

@回声搜索

for /R %%I in (*) do (
    "%sevenzip%" a -mx -mmt4 "%%I.7z" -r -x!*.bat "%%I"
)

del“压缩文件\u 7zip.bat.7z”*

del*.7z.7z

del*.zip.7z

:用于在流程结束后设置shutdown 60'。请拆下下面一行中的冒号。 ::shutdown.exe/s/t 3600

停顿


感谢所有人的支持,尤其是Frost。

对于不使用7zip的更简单版本:

for /f %%f in ('dir /a:-d /s /b /o *.mdb') do (
    zip -r -p "%%f.zip" "%%f"
)

嗨,你能说得更具体些吗?我不明白你所说的“只是将其输出用于”是指“用于/R”还是“用于/D”?谢谢。哦,我有点误解了你的目标。我的示例用于压缩单个文件;如果要压缩文件夹,必须使用
/a:d
参数。其他事情都一样。哦,对不起,不,不,你是对的。我想压缩文件,并将压缩文件保存在与未压缩文件相同的文件夹中。问题是我使用了你发布(更新)的代码,它似乎正在扫描整个c:驱动器。代码:对于/f%%I in('dir/a:-d/s/b/o')do(@echo%%I“%sevenzip%”a-mx-mmt2“%%I.7z”-r-xr!*.bat“%%I”rd/s/q“%%I”),使用/a:-d表示您只想查看非目录的内容。使用
/a:d
表示您只想查看目录。@AlejandroSalido
dir
如果省略路径,则使用当前工作文件夹。要扫描特定文件夹,只需指定路径:
dir c:\path\To\folder
。至于你的代码,我没有意识到一件事。如果您处理文件,那么为什么要对其使用
rd
?此命令删除文件夹。此外,没有必要使用特殊的remove命令,因为7zip具有“存档后删除源代码”模式,带有
-sdel
选项。OP声明:“我想使用7zip”-发布不使用7zip的答案有什么必要?