批处理文件中设置的变量未被读取

批处理文件中设置的变量未被读取

我有一个包含以下值的文本文件

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\*.*它替换,就可以正常工作。

我究竟做错了什么?

編輯0

删除的结果@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.

答案1

当指定的存档无效时,7Zip 会返回您看到的错误。这可能意味着您指定的存档类型错误、目标文件是损坏的存档,或者它不是存档(实际上与损坏的存档相同)。

我怀疑发生的事情是,在编写批处理文件时,您最初遗漏了开关-tzip,因此创建了带扩展名的.7z文件.zip。因此,当您随后添加开关时,7Zip 会查看它们并看到 7Zip 文件,但您指定的是 zip,因此它会抛出错误。

尝试将一切恢复到上述状态,然后删除c:\temp\datasource\*.zip并再次运行批处理文件。

此外,假设您的目录名称是替代的,那么您应该将变量括在引号中以避免出现空格问题:

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

答案2

尝试使用 set 命令

设置命令说明

答案3

我能让它工作的唯一方法是将路径移动c:\temp\datasource\*.*到 config.txt 文件,以便括号内的唯一参数是%datasource%。不确定这是否正常。

相关内容