Tengo un archivo de texto con los siguientes valores
datasource=c:\temp\datasource
Lo que luego intento leer de un archivo por lotes y llenar un bucle 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"
El error que obtengo es
System error:
Incorrect function.
Press any key to continue . . .
Ahora si lo reemplazo %datasource%\*.*
con c:\temp\datasource\*.*
eso funciona bien.
¿Qué estoy haciendo mal?
EDITAR0
Los resultados de eliminar @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.
windows
batch-file
CacahuetesMonkey
fuente
fuente
set datasource=c:\temp\datasource
?@echo off
en tu archivo por lotes? Sáquelo (coméntelo) y vea (y cuéntenos) lo que le dice.Respuestas:
7Zip devuelve el error que está viendo cuando el archivo especificado no es válido. Esto puede significar que está especificando el tipo de archivo incorrecto, el archivo de destino es un archivo corrupto o no es un archivo (efectivamente lo mismo que ser un archivo corrupto).
Sospecho que lo que sucedió fue que mientras elaboraba su archivo por lotes, inicialmente había omitido el
-tzip
interruptor y, por lo tanto, creó.7z
archivos con.zip
extensiones. Por lo tanto, cuando posteriormente agregó el interruptor, 7Zip los mira y ve los archivos 7Zip, pero está especificando zip, por lo que arroja el error.Intente volver a configurar las cosas como estaban arriba, luego elimine
c:\temp\datasource\*.zip
y vuelva a ejecutar el archivo por lotes.Además, suponiendo que los nombres de su directorio sean sustitutos, debe ajustar sus variables entre comillas para evitar problemas con los espacios:
fuente
c:\temp\datasource\*.zip
".=
" carácter, yadatasource=c:\temp\my=data
que no se analizará correctamente.intente usar el comando set
Establecer la descripción del comando
fuente
La única forma en que pude hacerlo funcionar fue mover la ruta
c:\temp\datasource\*.*
al archivo config.txt para que el único parámetro dentro del paréntesis fuera%datasource%
. No estoy seguro de si esto es normal.fuente