2016-07-27 3 views
1

Diese Batchdatei:Warum zeigt eine FOR-Schleife in der Batchdatei Verzeichnisse an, die nicht dem Platzhaltermuster entsprechen?

setlocal EnableDelayedExpansion 
echo off 
for %%a in (a b c d e f g h i j k l m n o p q r s t u v w x y z) do (
    for /D %%f in (K:\cases\%%a*) do (
      echo Found directory starting with-%%a directory=%%~nxf 
    ) 
) 

Ergebnisse in:

Found directory starting with-b directory=070441_0001_LAW 
Found directory starting with-d directory=DELETE_012216_0118 
Found directory starting with-e directory=eh_TEST_20151009 
Found directory starting with-f directory=029947_0030_LAW 
Found directory starting with-f directory=FB_Testing_Case 
Found directory starting with-k directory=070441_0001_LAWPROD 
Found directory starting with-l directory=060662_0012_LAW 
Found directory starting with-l directory=LAW_68_Update 
Found directory starting with-m directory=064451_0014_LAW 
Found directory starting with-m directory=064451_0015_LAW 
Found directory starting with-o directory=063113_0028_LAWPROD 
Found directory starting with-o directory=072920_0001_LAWEDA 
Found directory starting with-p directory=064451_1000_007_LAWPROD 
Found directory starting with-q directory=063113_0028_LAWEDA 
Found directory starting with-t directory=072920_0001_LAWPROD 
Found directory starting with-t directory=064451_1000_005_LAWPROD 
Found directory starting with-t directory=064451_1000_006_LAWPROD 
Found directory starting with-t directory=TEST_06222016 
Found directory starting with-u directory=060662_0012_LAWPROD 

Warum angezeigten Verzeichnisse, die nicht mit ihren entsprechenden Buchstaben soll man anfangen?

+1

Was sehen Sie, wenn Sie in einem Eingabeaufforderungsfenster 'dir K: \ cases \ b */AD/X' laufen, um alle Verzeichnisse, die mit Buchstabe B beginnen, auf jeden Fall anzuzeigen und auch einen kurzen 8.3 Namen angezeigt zu bekommen? Beginnt der kurze 8.3 Name des Verzeichnisses '070441_0001_LAW' mit' B'? – Mofi

+1

Ist das der vollständige Inhalt Ihrer tatsächlichen Batch-Datei? Ich bin etwas verdächtig, wenn einige dieser Buchstaben (zB "f", "o", "t" usw.) mehr als einmal aufgelistet sind, als ob die erste FOR-Schleife stottert ... – Filipus

+0

Ich habe zurückgerollt deine Bearbeitung Es ist unangemessen, deinen Post zu bearbeiten, um zu sagen: * Ja, du hast es gelöst *. Wenn Sie möchten, dass @Mofi eine Antwort posten kann, fragen Sie die richtige Syntax (wie ich gerade getan habe). Wenn Sie eine Antwort selbst veröffentlichen möchten, tun Sie dies in dem unten angegebenen Feld für Antworten. –

Antwort

0

Bei der Suche nach Dateien oder Verzeichnissen mit einem Platzhaltermuster berücksichtigt die Low-Level-Windows-Kernelroutine nicht nur den langen Datei-/Verzeichnisnamen, sondern auch den kurzen 8.3-Datei-/Verzeichnisnamen.

Dies führt oft zu unerwarteten Ergebnissen. Eine Methode zur Vermeidung von Fehlalarmen aufgrund eines kurzen 8.3-Datei-/Verzeichnisnamens, der dem Platzhaltermuster entspricht, obwohl der lange Datei-/Verzeichnisname nicht mit dem Muster übereinstimmt, besteht darin, den langen Namen gegen das Muster zu prüfen, z. B. mit FINDSTR.

Diese zusätzliche Überprüfung kann für diesen Fall sehr einfach ohne FINDSTR durchgeführt werden, da nur überprüft werden muss, dass der lange Verzeichnisname wirklich mit dem erwarteten Groß-/Kleinschreibung beginnt.

@echo off 
setlocal EnableExtensions EnableDelayedExpansion 
for %%a in (a b c d e f g h i j k l m n o p q r s t u v w x y z) do (
    for /D %%D in (K:\cases\%%a*) do (
     set "DirectoryName=%%~nxD" 
     if /I "!DirectoryName:~0,1!" == "%%a" (
      echo Found directory starting with %%a - directory=%%~nxD 
     ) 
    ) 
) 
endlocal 

dir /AD /X können die Kurznamen der Verzeichnisse zu sehen, verwendet werden.

Um die verwendeten Befehle und ihre Funktionsweise zu verstehen, öffnen Sie ein Eingabeaufforderungsfenster, führen Sie die folgenden Befehle aus und lesen Sie alle Hilfeseiten, die für jeden Befehl angezeigt werden, sorgfältig durch.

  • dir /?
  • echo /?
  • endlocal /?
  • for /?
  • if /?
  • set /?
  • setlocal /?
Verwandte Themen