2011-06-23 12 views
5

En un archivo por lotes estándar de Windows (cmd) que quiero hacer:¿Por qué falla FOR/F "skip = 0"?

FOR /F "skip=0" %%G IN (filename.txt) DO (ECHO %%G) 

pero me da " was unexpected at this time.

"skip=1" funciona bien (en mi código real 0 es una variable).

De acuerdo con ss64.com el valor predeterminado es skip=0, pero parece que no funciona cuando se establece explícitamente.

¿Lo estoy haciendo mal? ¿O hay una solución alternativa que pueda usar?

Editar:

He intentado esto tanto en el servidor Windows 2003 y Windows 7.

El contenido de filename.txt podría ser:

something 
stuff 
unicorns 

Respuesta

6

Realmente no como el 0, lo que hace que el analizador espere más después de él (también se puede disparar cuando se intenta usar 09 que intenta analizar como octal, que falla).

Supongo que necesita crear una variable de entorno que contenga la parte skip=n completa o nada e insertar eso en la lista de argumentos. Algo así como

if %N% GTR 0 (
    set SKIP="skip=%N%" 
) else (
    set SKIP= 
) 

y luego usar

for /f %SKIP% %%G ... 

(o sin las comillas si necesita pasar más opciones).

+0

impresionante. Corregí el código para que los comandos 'set' estuvieran en sus propias líneas. De lo contrario, 'SKIP' se establecerá en algo no deseado. :) – steenhulthin

+0

@steenhulthin: ¿Puedo preguntar a qué te refieres? –

+1

@Andriy Por supuesto. Si miras en el historial verás que el código inicialmente estaba en una línea: 'si% N% GTR 0 establece SKIP =" skip =% N% "else establece SKIP =', lo que causaría '% SKIP%' establecerse en '" skip =% N% "else establecer SKIP =' si '% N%' es mayor que 0. – steenhulthin

0

puedo añadir un "" primera línea "falsa" para evitar la cola (s) IF y mantener el "salto" en cualquier momento:

:: liste des fichiers du repertoire et de ses sous-repertoires 
echo *** liste des fichiers du repertoire et de ses sous-repertoires >%FicListImg% 
dir /s /b /a:-d %RepImg%\*.* >> %FicListImg% 
set compteurA=0 
for /f %%a in (%FicListImg%) do set /a CompteurA+=1 
set /a CompteurA = %CompteurA%-1 
set /a NbImg = %CompteurA%-1 
@echo Repertoire Images : %RepImg% (%NbImg% images) 
Cuestiones relacionadas