Conjunto de variables en archivo por lotes que no se lee


0

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.

¿Quieres decir que tienes set datasource=c:\temp\datasource?
Martineau

@martineau - No. La fuente de datos es simplemente una línea en el archivo de texto
PeanutsMonkey

¿Tienes @echo offen tu archivo por lotes? Sáquelo (coméntelo) y vea (y cuéntenos) lo que le dice.
Scott

Lo siento, pensé que era parte del archivo por lotes.
Martineau

@ Scott - Sí, lo hago. He publicado los resultados anteriores en mi publicación.
PeanutsMonkey

Respuestas:


0

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 -tzipinterruptor y, por lo tanto, creó .7zarchivos con .zipextensiones. 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\*.zipy 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:

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

Creo que te refieres a "eliminar c:\temp\datasource\*.zip".
Scott

Sí; en realidad tenía la intención de cambiar eso anoche pero lo olvidé. Gracias.
Synetech

Buena captura de las citas. Me hizo pensar en el corolario obvio: el nombre de la fuente de datos no debe contener ningún " =" carácter, ya datasource=c:\temp\my=dataque no se analizará correctamente.
Scott

Correcto porque el signo igual es de hecho un carácter válido para los nombres de archivos y carpetas. Tantos pequeños detalles y capturas a tener en cuenta. Y la gente se pregunta por qué hay tantos errores en el software ...
Synetech


0

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.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.