2012-09-20 24 views
5

Soy nuevo en archivos por lotes y yo estoy tratando de escribir una para hacer parte de mi trabajo (sé derecha perezoso)CMD llegar cadena desde el archivo y configurarlo como una variable para su uso en cd

Así ahora he lo siguiente ...

SET skip=1 

REM for all the directories indicated to contain core repositories 
FOR /F "skip=%skip% delims=" %%i IN (C:\Repos.txt) DO ( 
SET TgtDir =%%i 
echo %TgtDir% >> C:\result.txt 
) 

el contenido de Repos.txt es:

60000 
C:\somedir\someotherdir\ 
C:\a\b\c\ 

Básicamente quiero este script para ir a través de un archivo, haciendo caso omiso de la primera línea que se utilizará para una configuración de retraso más tarde, y extraer cada línea n (idealmente) pasarlo a un comando de cd, pero por ahora solo intento introducirlo en la variable TgtDir.

Cuando corro este guión la salida en C: \ Result.txt es:

ECHO is on. 
ECHO is on. 

Cualquier ayuda?

+1

'set TgtDir = %% I' establece una variable llamada '' TgtDir - tenga en cuenta el espacio adicional, por lo que ''% TgtDir% devuelve nada ya que no hay nada llamado que – SeanC

Respuesta

10

Querrá consultar la opción EnableDelayedExpansion para archivos de proceso por lotes. Desde el enlace mencionado anteriormente:

La expansión de la variable retrasada suele ser útil cuando se trabaja con FOR Loops. Normalmente, todo un bucle FOR se evalúa como un único comando, incluso si abarca varias líneas de un script por lotes.

Así que su guión acabaría con este aspecto:

@echo off 
setlocal enabledelayedexpansion 
SET skip=1 

REM for all the directories indicated to contain core repositories 
FOR /F "skip=%skip% delims=" %%i IN (C:\Repos.txt) DO (
    SET TgtDir=%%i 
    echo !TgtDir! >> C:\result.txt 
) 

Como alternativa, sólo tiene que utilizar la variable %%i en su bucle interno, en lugar de crear una nueva variable.

+0

solución fantástica, perfecta. gracias :) –

+0

Esto resolvió mi problema también. En mi caso, el script siempre falló la primera vez que se ejecutó en un nuevo cmd.exe. Sin embargo, ejecutarlo dos veces en el mismo cmd.exe funcionaría. Gracias por esta pista. :) – Qben

0
@echo off 
setlocal enabledelayedexpansion 
SET skip=1 
REM for all the directories indicated to contain core repositories 
FOR /F "skip=%skip% delims=" %%i IN (C:\Repos.txt) DO echo %%n>>c:result.txt 
+0

Sin formato esto es muy muy difícil de entender. – Andrew

Cuestiones relacionadas