我有一个包含以下值的文本文件
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%
。不确定这是否正常。