Ordner mit Stapel suchen

935
Wyz

Ich versuche, ein Skript zu erstellen, das hilft, eine große Bibliothek mit vielen Ordnern, Namen und Nummern zu durchsuchen. Die Teilenummern sind in 4 Teile XXX.XX.XX.XXXX unterteilt . Um die Suche zu erleichtern, sind die Bibliotheksordner folgendermaßen eingestellt: (Beispielnamen) 100_Vegetal \ 01_Flower \ 01_Red \ 0001_Rose

Mein Problem ist der Name der Ordner. Wenn der Ordner nur "100" genannt wurde, ist es einfach, durchzugehen. Hier ist der Code, den ich verwende, um die Teilenummer zu trennen und zu versuchen, den Ordner zu öffnen.

set /p pnr="Please enter the PNR : "  echo %pnr% echo %pnr:~0,3%  echo %pnr:~4,2% echo %pnr:~7,2% echo %pnr:~10,4% explorer ".library\%pnr:~0,3%(*)" 

Ich möchte einen Ordner öffnen, der die ersten 3 Ziffern der Teilenummer enthält. Können Sie mir bitte bei diesem Problem helfen? Ich habe es mit dem Stern versucht, aber es öffnet den Explorer ...

Vielen Dank.

0
Verwenden Sie `for / f" tokens = 1-4 delims =. " %% A in ("% pnr%") geben Echo %% A, %% B, %% C, %% D` zurück, um das pnr für Meta-Variablen %% A .. %% D in vier Teile zu teilen LotPings vor 5 Jahren 1
Der Explorer akzeptiert keine Platzhalter in einem übergebenen Verzeichnisnamen: Sie benötigen etwas wie `for / d %% d in (" .library \% pnr: ~ 0,3% * ") do start / w explorer" %% d "`. AFH vor 5 Jahren 0

2 Antworten auf die Frage

1
Pimp Juice IT

Sie können den Befehl dir mit den /S /B /ADParametern in einer for / f- Schleife verwenden und veranlassen, dass der Quellordner rekursiv nur für Verzeichnisse durchsucht und dann diese Ordner mit den von Ihnen eingegebenen Nummern mit einem Platzhalter durchlaufen werden, der im Explorer geöffnet wird.

Skriptbeispiel

set /p pnr="Please enter the PNR : "  set pnr=%pnr:~0,3% FOR /F "TOKENS=*" %%a IN ('DIR /S /B /AD ".library\%pnr%*"') DO explorer "%%~fa" 

Weitere Ressourcen

  • Für / F
  • FOR /?

     tokens=x,y,m-n - specifies which tokens from each line are to be passed to the for body for each iteration. This will cause additional variable names to be allocated. The m-n form is a range, specifying the mth through the nth tokens. If the last character in the tokens= string is an asterisk, then an additional variable is allocated and receives the remaining text on the line after the last token parsed. 
  • Dir
Danke für deine Hilfe. Wyz vor 5 Jahren 0
1
LotPings

Vorausgesetzt, dass die Nummern aus der pnr im Ordnerbaum eindeutig sind, wird der folgende Stapel direkt den Ordner öffnen, der allen 4 Nummern entspricht, indem er mit aufeinanderfolgenden durchläuft for /d loops

Achten Sie darauf, dass die for-Meta-Variablen zwischen Groß- / Kleinschreibung unterscheiden,
so dass der pnr aufgeteilt wird %%A..%%Dund die gefundenen Ordner darin liegen%%a..%%d

Musterbaum auf meinem RAM-Laufwerk A:

> tree A:. └───.library └───100_Vegetal └───01_Flower └───01_Red └───0001_Rose 

:: Q:\Test\2018\10\26\SU_1370234.cmd @Echo off  set "Base=A:\.library" set /p pnr="Please enter the PNR : "  :: set pnr=100.01.01.0001 echo %pnr%  :: reset Level variables for /l %%L in (1,1,4) do Set "Level%%L="  :: first split pnr, then dive into folders for /f "tokens=1-4 delims=." %%A in ("%pnr%" ) Do ( for /d %%a in ("%Base%\%%A*") Do (Set Level1=%%a for /d %%b in ("%%a\%%B*") Do (Set Level2=%%b for /d %%c in ("%%b\%%C*") Do (Set Level3=%%c for /d %%d in ("%%c\%%D*") Do (Set Level4=%%d Explorer "%%d ) ) ) ) ) :: set Level 

Beispielausgabe:

> Q:\Test\2018\10\26\SU_1370234.cmd Please enter the PNR : 100.01.01.0001 Level1=A:\.library\100_Vegetal Level2=A:\.library\100_Vegetal\01_Flower Level3=A:\.library\100_Vegetal\01_Flower\01_Red Level4=A:\.library\100_Vegetal\01_Flower\01_Red\0001_Rose 

Explorer öffnet sich hier in A:\.library\100_Vegetal\01_Flower\01_Red\0001_Rose

Vielen Dank, dass das so gut funktioniert. Wyz vor 5 Jahren 0
Wie kann ich den Levelpfad "ausblenden"? Wyz vor 5 Jahren 0
Einfach die letzte Zeile kommentieren / entfernen, sie wurde implementiert, um zu helfen, wenn für alle 4 pnr-Elemente kein übereinstimmender Ordner gefunden wird. LotPings vor 5 Jahren 0
Du meinst das eingestellte Level? Wyz vor 5 Jahren 0
Ja, oben geändert. LotPings vor 5 Jahren 0
Wenn ich es als Kommentar stelle, gibt es einen Syntaxfehler ... Wyz vor 5 Jahren 0
Es läuft hier wie oben geschrieben ohne Mängel. LotPings vor 5 Jahren 0
In Kommentar hatte ich einen Fehler, aber durch das Löschen der Zeile funktioniert es gut, danke für Ihre Unterstützung. Wyz vor 5 Jahren 1