set "Xpath=\\server1\folder\folder\folder\dest-folder"
set source=^"%Xpath%\nwm*.zip^"
set destination=%Xpath%
setlocal
for /f "tokens=* delims=" %%a in ('dir/b "%destination%\nwm*.zip"') do (
>> %temp%\unzip.vbs echo ^'test
>> %temp%\unzip.vbs echo call WindowsUunzip(%%a,"%destination%"^)
>> %temp%\unzip.vbs echo Function WindowsUunzip(sUunzipFileName, sUunzipDestination^)
C:\windows\system32\cscript //nologo %temp%\unzip.vbs
pause
if exist "%temp%\unzip.vbs" del /f /q "%temp%\unzip.vbs"
)
endlocal
PATH - это последовательность каталогов, которую Windows ищет, чтобы найти исполняемый файл, если он не найден в текущем каталоге. Вы меняете это на свой страх и риск.
Известно ли вам, что значения set
перед командой setlocal
постоянно set
входят в среду этого сеанса?
Более нормально проверять source
, а не destination
для файлов в for /f
сканировании каталогов.
Использование метки в цикле for
почти гарантированно создает проблемы. Я подозреваю, что вы подвергли цензуре (вполне приемлемо при создании минимального скрипта) существенный оператор goto unzip
в цикле for
(вы не можете goto
пункт назначения в цикле for
.)
и ваш endlocal
должен быть вне цикла for
, в противном случае он будет отображаться для каждого вызванного значения цикла.
Наконец, знаете ли вы, что
> %temp%\unzip.vbs echo ^'test
(обратите внимание на один >
) запустит новый файл %temp%\unzip.vbs
, заменив любую существующую версию? Это может сэкономить вам gated-delete (но вам нужно будет удалить файл [если вы того пожелаете] после закрытия цикла for
)