我有两个Windows批处理脚本,它们都可以递归它们所在的文件夹,并将每个.rar文件提取到rar文件的文件夹中。
但是,当文件夹使用以下结构时:
file.part01.rar
file.part02.rar
file.part03.rar ect..
该脚本在尝试提取这些文件(因为它们与.rar扩展名匹配)并向用户呈现FileExtract.bla时就已经窒息了:覆盖了吗?(是)/(否)o?rar存档部分数量的X倍(通常是20或30倍)。
我一直试图找出在我的批处理脚本中,如何先将扩展名为part02.rar到part99.rar(但不是part01.rar的文件)过滤掉,然后再传递给“ DO” / unrar命令。
这是两个不同的批处理文件,它们都以相同的方式工作(并且在part02.rar文件中以相同的方式失败):
@ECHO OFF &SETLOCAL disableDelayedExpansion
SET "sourcefolder=."
FOR /R "%sourcefolder%" %%a IN (*.r*) DO (
FOR /f "delims=" %%b IN ('echo %%~xa^|findstr /r "\.r.*"') DO
("C:\Program Files\7-zip\7z.exe" x "%%~a")
)
和#2:
@echo on
FOR /D /r %%F in ("*") DO (
pushd %CD%
cd %%F
FOR %%X in (*.rar *.zip) DO (
"C:\Program Files\7-zip\7z.exe" x "%%X"
)
popd
)
谢谢
该脚本在尝试提取这些文件(因为它们与.rar扩展名匹配)并向用户呈现FileExtract.bla时就已经窒息了:覆盖了吗?(是)/(否)o?rar存档部分数量的X倍(通常是20或30倍)。
为什么不简单地通过管道将“ N”传递给7z
命令以告诉他们在“ NO”中选择“ N”选项(如果显示的话)呢?
我不知道这是否这些命令总是适用的开始file.part01.rar
,然后再移动到file.part02.rar
,file.part03.rar
等的顺序,或者如果这是真的,即使对于明智提取的内容重复的文件很重要。
如果仅在出现问题时才仅选择自动启用此选项,则自动选择该“ N”选项应允许其他文件也被提取并自动完成。
因此,问题在于这些带有部分[02-99] .rar文件名的RAR文件提取的文件在提取文件的位置已经存在,因此要求您是否要覆盖现有文件。
如果它首先提取01个命名文件,然后尝试在提取文件覆盖冲突的情况下尝试所有后续匹配的文件名,则此方法应该起作用。
如果这能按预期工作,那么就可以对批处理脚本逻辑中所需的内容进行很小的更改(请参见下面的示例)。
@ECHO OFF &SETLOCAL disableDelayedExpansion
SET "sourcefolder=."
FOR /R "%sourcefolder%" %%a IN (*.r*) DO (
FOR /f "delims=" %%b IN ('echo %%~xa^|findstr /r "\.r.*"') DO
(ECHO N | "C:\Program Files\7-zip\7z.exe" x "%%~a")
)
@echo on
FOR /D /r %%F in ("*") DO (
pushd %CD%
cd %%F
FOR %%X in (*.rar *.zip) DO (
ECHO N | "C:\Program Files\7-zip\7z.exe" x "%%X"
)
popd
)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句