【发布时间】:2016-05-05 03:34:45
【问题描述】:
我需要遍历当前文件夹中的所有文件,并仅在其为 zip 文件时提取它们。所以我写了下面的批处理脚本。但我收到一个错误提示
"=="."zip" was unexpected at this time
下面是我写的批处理脚本。
@echo off
cd /d %~dp0
for /r %%i in (*) do if %%i "%Extension%"==".zip" (
setlocal
cd /d %~dp0
Call :UnZipFile "G:\NewUpdates\ExtractedStuff" %%i
exit /b
:UnZipFile <ExtractTo> <newzipfile>
set vbs="%temp%\_.vbs"
if exist %vbs% del /f /q %vbs%
>%vbs% echo Set fso = CreateObject("Scripting.FileSystemObject")
>>%vbs% echo If NOT fso.FolderExists(%1) Then
>>%vbs% echo fso.CreateFolder(%1)
>>%vbs% echo End If
>>%vbs% echo set objShell = CreateObject("Shell.Application")
>>%vbs% echo set FilesInZip=objShell.NameSpace(%2).items
>>%vbs% echo objShell.NameSpace(%1).CopyHere(FilesInZip)
>>%vbs% echo Set fso = Nothing
>>%vbs% echo Set objShell = Nothing
cscript //nologo %vbs%
if exist %vbs% del /f /q %vbs%
)
pause
我在这里做错了什么?请指教。
【问题讨论】:
-
%extension%没有特殊含义。通常,您通过if "%var%"=="whatever"解决上述缺失变量。但是你想要%%~xi看到for /?的结尾寻求帮助。 -
或
for /f "delims=" %%A in ('dir /b /s c:\somefolder\*.zip') do echo %%A见dir /?、for /?。 -
@Noodles',为什么是
for /F?for /R %%i in (*.zip) do够了…… -
您已经在
for /R循环中包含了子程序UnZipFile,但您不应该这样做;将)放在exit /B之前;在)之前放置endlocal以不超过循环中setlocal的嵌套深度... -
创建和删除提取脚本会大大减慢你的脚本。你可以使用
WScript.Arguments而不是%1和%2并且不要在每次迭代时更改vbs文件。你可以检查还有this
标签: windows batch-file cmd zip file-extension