2012-09-20 3 views
5

Ich bin neu in Batch-Dateien und ich versuche, einen zu schreiben Teil meiner Arbeit (ich weiß, faul rechts)CMD Zeichenfolge aus der Datei erhalten und es als eine Variable SET in CD verwenden

So zu tun bis jetzt habe ich die folgende ...

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 
) 

der Inhalt Repos.txt ist:

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

Grundsätzlich ich dieses Skript durch eine Datei gehen wollen, die erste Zeile zu ignorieren, die verwendet wird für eine Verzögerungseinstellung später und extrahiere jede Zeile die n (im Idealfall) übergebe es an einen cd-Befehl, aber im Moment versuche ich nur, es in die Variable TgtDir zu bekommen.

Wenn ich dieses Skript die Ausgabe in C auszuführen: \ result.txt ist:

ECHO is on. 
ECHO is on. 

Jede Hilfe?

+1

'SET TgtDir = %% I' eine Variable setzt namens' 'TgtDir - den zusätzlichen Platz beachten, so'% TgtDir% 'gibt nichts zurück, da es nichts, dass – SeanC

Antwort

10

Sie sollten sich die Option EnableDelayedExpansion für Batchdateien ansehen. Von der oben genannten Verbindung:

Verzögerte variable Erweiterung ist oft nützlich, wenn Sie mit FOR Loops arbeiten. Normalerweise wird eine gesamte FOR-Schleife als einzelner Befehl ausgewertet, auch wenn sie sich über mehrere Zeilen eines Stapelscript erstreckt.

Also Ihr Skript würde am Ende wie folgt suchen:

@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 
) 

Als Alternative verwenden Sie einfach die %%i Variable in der inneren Schleife, anstatt eine neue Variable zu schaffen.

+0

Fantastisch, perfekte Lösung genannt ist. Danke :) –

+0

Dies löste mein Problem auch. In meinem Fall ist das Skript bei der ersten Ausführung in einer neuen cmd.exe immer fehlgeschlagen. Wenn Sie es zweimal in derselben cmd.exe ausführen, funktioniert es jedoch. Danke für diesen Hinweis. :) – 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

Ohne Formatierung ist das sehr sehr schwer zu verstehen. – Andrew

Verwandte Themen