У меня есть текстовый файл со следующими значениями

datasource=c:\temp\datasource

Который я тогда пытаюсь прочитать из командного файла и заполняю цикл for.

for /f "tokens=1,2 delims==" %%b in (config.txt) do ( 
if %%b==datasource set datasource=%%c 
) 

for %%a in (%datasource%\*.*) do if "%%~xa" == "" "C:\Program Files\7-Zip\7za.exe" a -tzip -mx9 "%%a.zip" "%%a"

Я получаю ошибку

System error:
Incorrect function.

Press any key to continue . . .

Теперь, если я заменю %datasource%\*.* c:\temp\datasource\*.* Он будет работать нормально.

Что я делаю неправильно?

EDIT0

Результаты удаления @echo off

REM @echo off

setlocal enabledelayedexpansion

for /F "tokens=1,2 delims==" %b in (config.txt) do (
if %b == datasource set datasource =%c
)

D:\sftp\winscp438>(
if datasource == datasource set datasource=c:\temp\datasource

)

for %a in (c:\temp\datasource\*.*) do if "%~xa
" == "" "C:\Program Files\7-Zip\7za.exe" a -tzip -mx9 "%a.zip" "%a"

if "" == "" "C:\Program Files\7-Zip\7za.exe" a -tzip -mx9 "c:\temp\datasource\sample.zip" "c:\temp\datasource"

7-Zip (A) 9.20  Copyright (c) 1999-2010 Igor Pavlov  2010-11-18

Error: c:\temp\datasource\sample.zip is not supported archive


System error:
Incorrect function.

3 ответа3

0

попробуйте использовать команду set

Установить описание команды

0

Единственный способ заставить его работать - переместить путь c:\temp\datasource\*.* В файл config.txt, чтобы единственным параметром в скобках был %datasource% . Не уверен, нормально ли это.

0

Ошибка, которую вы видите, возвращается 7Zip, когда указанный архив недействителен. Это может означать, что вы указываете неправильный тип архива, целевой файл является поврежденным архивом, или это не архив (по сути, то же самое, что и поврежденный архив).

Я подозреваю, что произошло то, что, когда вы создавали свой пакетный файл, вы изначально пропустили ключ -tzip и создали файлы .7z с расширениями .zip . Таким образом, когда вы впоследствии добавили переключатель, 7Zip просматривает их и видит файлы 7Zip, но вы указываете zip, и он выдает ошибку.

Попробуйте установить вещи обратно, как они были выше, затем удалите c:\temp\datasource\*.zip и снова запустите пакетный файл.

Кроме того, предполагая, что ваши имена каталогов являются резервными, вы должны заключить переменные в кавычки, чтобы избежать проблем с пробелами:

for %%a in ("%datasource%\*.*") do if …

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .