2017-05-12 4 views
0

Ich habe eine sehr einfache Batch-Skript, liest eine TXT-Datei und Echo ist es Inhalt. Das Skript ist:CMD lesen Datei über für in

@echo off 
set WORK_BASE_DIR=%~dp0 
set BUILD_TXT=%WORK_BASE_DIR%Build.txt 
echo %BUILD_TXT% 

set PRODUCT_BUILD=0.0 

for /F %%i in ("%BUILD_TXT%") do set PRODUCT_BUILD=%%i 
echo %PRODUCT_BUILD% 

Die Ausgabe dieses Skripts ist:

D:\Test Dir\Project1\Build.txt \\Correct 
D:\Test       \\Incorrect 

Wie Sie sehen können, ist die PRODUCT_BUILD auf den Pfad der Datei und nicht der Inhalt der Datei. Die build.txt-Datei im selben Verzeichnis ist und es enthält nur eine Zeile: 1.0.0000

Wenn ich die "" aus der for Anweisung entfernen, heißt es build.txt Datei nicht gefunden, die als der Dateipfad Leerzeichen enthält erwartet wird.

Gibt es etwas, das ich vermisse?

Antwort

0

Nach der Hilfe von for /F (Typ for /? in ein Fenster der Eingabeaufforderung), Anführungszeichen bezeichnen eine Zeichenkette, wenn Sie die usebackq Option angeben:

for /F "usebackq" %%i in ("%BUILD_TXT%") do set "PRODUCT_BUILD=%%i" 

Darüber hinaus lassen Sie mich empfehlen Verwenden Sie die oben angegebene set-Syntax, die Probleme mit Sonderzeichen vermeidet und verhindert, dass unsichtbare unbeabsichtigte nachgestellte Leerzeichen Teil des zugewiesenen Werts werden. Beachten Sie, dass dies nur funktioniert, wenn command extensions aktiviert sind, aber dies ist der Standard in jeder modernen Windows-Version (basierend auf Windows NT).