2014-07-21 109 views
0

我遇到了BAT文件的问题,它不会将文件解压到其完整路径名称,因为某些zip文件包含名为相同名称但含有不同销售数据的文件使用BAT文件将文件解压缩到完整路径

示例文件

MainLine20140606.zip contains marketingdb.mdb 
Valis20140606.zip contains marketingdb.mdb 

我不希望这些过度写对方,但不希望有手动干预无论是。

bat文件解压的文件夹中的任何zip文件是从运行:

@echo off 
for /F "delims=" %%I IN (' dir /b /s /a-d *.zip ') DO (
    "C:\Program Files\WinRAR\WinRAR.exe" x -y -o"%%~dpI\%%~fI" "%%I" 
) 
pause 
+0

有一些不清楚的东西:你是否想要用zip文件的名称来提取单独文件夹中的每个zip文件,或者需要的是将输出文件重命名的同一文件夹中的所有文件提取出来? –

+0

您建议的任一解决方案都能正常工作我必须将mdb解压出来,然后使用zip文件夹名称和mdb名称对其进行重命名,或将它们解压缩到单独的文件夹中,该文件夹在包含其mdb的zip文件后以该方式不必重命名他们。 – LoveToys

回答

1
@echo off 
    setlocal enableextensions disabledelayedexpansion 
    set "rarCmd=%programFiles%\WinRAR\WinRAR.exe" 

    for /r "%cd%" %%a in (*.zip) do "%rarCmd%" x -or -y "%%~fa" * "%~dp0%%~na\" 

    endlocal 

对于当前的文件夹(/r "%cd%"),呼叫WinRAR解压(x)下的每个压缩文件,具有自动重命名(-or)如果需要的话,假定是对所有查询(-y),则压缩文件(%%~fa,即具有完整路径的文件),选择所有文件内容(*),并将输出放在与放置批处理文件的文件夹下的文件夹(%%~na)同名的文件夹中(%~dp0

包含-or以便不覆盖以前运行的文件,如果不需要则将其删除。

也可以指定目标文件夹的名称,在命令中添加-ad开关并从目标文件夹中删除%%~na\

+0

绝对精湛你的位置正是我希望它是非常感谢你大量的赞美:)虐待转发链接到这个答案在其他论坛再次感谢你 – LoveToys

0

您可以使用命令

"C:\Program Files\WinRAR\WinRAR.exe" e -ad "Path To\ZIP Files\*.zip" "Path To\Target\Folder\" 

使用此命令的WinRAR解压所有* .zip文件中Path To\ZIP Files\Path To\Target\Folder\,从而对于每个ZIP文件,ZIP文件的名称被附加到目标目录路径。

后WinRAR的完成所有解压ZIP文件,您可以运行以下批处理文件在所有子文件夹中创建的所有marketingdb.mdb移到原来的目标文件夹重命名MDB文件并删除现在是空的子文件夹。

@echo off 
cd /D "Path To\Target\Folder\" 
for /F "delims=" %%I in ('dir * /b /ad') do (
    move "%%I\marketingdb.mdb" "%%I.mdb" 
    rd "%%I" 
) 
+0

这是一个非常好的努力,但我一直尝试使用它时出现错误,非常感谢你的回答,尽管非常感谢:) – LoveToys

+0

@LoveToys,请让我知道你在执行**时遇到哪些错误** WinRAR **或批处理文件?我根据你的问题尝试了2个ZIP文件,每个只包含'marketingdb.mdb',并且在执行** WinRAR **或批处理文件时没有发生错误。你的ZIP文件不仅包含'marketingdb.mdb'吗? – Mofi

+0

是的,有一个名为TDmarketingdb.accdb的数据库,但它不是那个错误,它没有提取或创建带有zip文件夹的文件夹,也没有提取我必须手动指向文件夹和文件,所以无法自动运行。 – LoveToys