2016-08-14 7 views
1

Ich habe eine Textdatei PATHS.TXT Es enthält folgende Daten, Warum zieht for/f den Dateinamen hoch?

Local RemotePath

namens
N: \ DANIEL-HP \ Benutzer \ Öffentlich
Z: \ DANIEL-HP \ Users \ Public \ Favoriten
Local RemotePath
N: \ DANIEL-HP \ Benutzer \ öffentlich
Z: \ DANIEL-HP \ Users \ Public \ Favoriten

Ich führe die folgende Batch-Datei aus, um den Pfad des gewünschten Pfades zu extrahieren.

@echo off 
for /f "tokens=1 delims=" %%a in ('find ":" paths.txt') do (
echo %%a 
) 
pause 

Das Ergebnis

---------- PATHS.TXT 
N:   \\DANIEL-HP\Users\Public 
Z:   \\DANIEL-HP\Users\Public\Favorites 
N:   \\DANIEL-HP\Users\Public 
Z:   \\DANIEL-HP\Users\Public\Favorites 
Press any key to continue . . . 

Die Art und Weise, die ich dieses Problem beheben, das ich, wie unten die FÜR ändern,

for /f "skip=2 tokens=1 delims=" %%a in ('find ":" paths.txt') do (echo %%a) 

Und ich eine saubere gewünschte Ausgabe zu erhalten,

N:   \\DANIEL-HP\Users\Public 
Z:   \\DANIEL-HP\Users\Public\Favorites 
N:   \\DANIEL-HP\Users\Public 
Z:   \\DANIEL-HP\Users\Public\Favorites 
Press any key to continue . . . 

Frage ist, was ist falsch mit meiner ersten FOR-Funktion, die es erlaubt, den Dateinamen Passthrough.

Antwort

3

Das Problem ist Ihr FIND-Befehl, nicht Ihr FOR/F.

FIND gibt immer den Namen der Datei aus, wenn die Datei selbst geöffnet wird (wenn der Dateiname als Argument übergeben wird).

Sie den Dateinamen Umleitung unter Verwendung vermeiden:

find ":" <paths.txt 

oder ein Rohr:

type paths.txt | find ":" 

diese FOR-Schleife in einem zu verwenden, muss das Rohr oder die Umleitung entkommen sein.

for /f "tokens=1 delims=" %%a in ('find ":" ^< paths.txt') do echo %%a 
for /f "tokens=1 delims=" %%a in ('type paths.txt ^| find ":"') do echo %%a 

Eine weitere Alternative ist FINDSTR stattdessen zu verwenden (aber nur, wenn die Datei ASCII):

findstr ":" paths.txt 

Wenn die Datei Unicode (UTF-16) ist, dann können Sie den Inhalt in ASCII konvertieren durch die Ausgabe des Befehls TYPE Leitung (wieder entweichen das Rohr innerhalb FOR/F falls verwendet):

type paths.txt | findstr ":" 
+0

Fund haben ":" DannyBoi

+0

@dbenham .... Alle von Ihnen vorgeschlagenen Lösungen arbeiten perfekt außerhalb der ** for-Schleife **, aber innerhalb der Klammern '()' der for-Schleife, sie sind nicht. Bitte beachten Sie die Syntax. – DannyBoi

+2

@DannyBoi Die speziellen Charater müssen maskiert werden, siehe Edit – jeb

1

Bedarf gelöscht werden;))

/* i Beratung:

find ":" ^<paths.txt 
type paths.txt ^| find ":" 

findstr Arbeiten groß ..ich nicht verstehen, was der Rohling Sie

@echo off 
set "tmp=PATHS.TXT"----your value 
echo,---findstr 
for /f "tokens=1 delims=" %%a in ('findstr ":" %tmp%') do (echo %%a) 
echo,---type 
for /f "tokens=1 delims=" %%a in ('type %tmp% ^| find ":"') do (echo %%a) 
echo,---redirect 
for /f "tokens=1 delims=" %%a in ('find ":" ^<%tmp%') do (echo %%a) 

*/

+0

'--- findstr --- Typ N: \\ DANIEL-HP \ Users Öffentliche Z \: \\ DANIEL-HP \ Users \ Public \ Favoriten N: \\ DANIEL-HP \ Benutzer \ Öffentlich Z: \\ DANIEL-HP \ Users \ Public \ Favoriten --- Umleitung N: \\ DANIEL-HP \ Users \ Public Z: \\ DANIEL-HP \ Users \ Public \ Favoriten N: \\ DANIEL -HP \ Users \ Public Z: \\ DANIEL-HP \ Users \ Public \ Favoriten' Das ist der Ausgang, den ich bekomme – DannyBoi

Verwandte Themen