schmitho
Goto Top

Mehrere Ordnernamen auslesen und in eine Variable schreiben

Hallo zusammen,

ich versuche verzweifelt eine Lösung eines Problems zu finden, wie ich den Namen mehrere Ordner in eine Variable schreiben kann, um damit dann im späteren Verlauf des Batch Scripts zu arbeiten.

Mein Problem ist, dass die For-Schleife sich schon die Ordnernamen ausliest und in die Variable schreibt, aber immer die vorherige mit dem nachfolgenden Ordnernamen überschreibt, so dass der letzte Ordner immer in der Variable präsent ist.

REM Path common definitions
set DLETTER=C:
set BASE=%DLETTER%\DHL\tomcat\webapps\os\Schnittstellen\DSI\M78\

REM CustomerID definition
FOR /F %%g IN ('dir /b %BASE%') DO SET CLNUMBER=%%g  

REM Copy source to target
set SOURCE=%BASE%\%CLNUMBER%\PDF
set TARGET=%DLETTER%\DHL\tomcat\webapps\os\clientfiles\M78\%CLNUMBER%\PDF

move /Y %SOURCE%\*.pdf %TARGET%\



Hat jemand eine Idee für das Lösen des Problems?


VG

Schmitho

Content-ID: 304415

Url: https://administrator.de/forum/mehrere-ordnernamen-auslesen-und-in-eine-variable-schreiben-304415.html

Ausgedruckt am: 03.04.2025 um 04:04 Uhr

Kraemer
Kraemer 13.05.2016 um 09:07:07 Uhr
Goto Top
Hi,

das was du suchst / brauchst nennt sich Array.
Das ist Beispielsweise hier ganz nett erklärt.

Gruß Krämer
129148
Lösung 129148 13.05.2016, aktualisiert am 14.05.2016 um 08:54:14 Uhr
Goto Top
@echo off
set DLETTER=C:
set "BASE=%DLETTER%\DHL\tomcat\webapps\os\Schnittstellen\DSI\M78"  

FOR /F %%g IN ('dir /b /AD "%BASE%"') DO move "%BASE%\%%g\PDF\*.pdf" "%DLETTER%\DHL\tomcat\webapps\os\clientfiles\M78\%%g\PDF"\  
Oder mit DelayedExpansion wenn du unbedingt Variablen brauchst (bräuchte man hier aber eigentlich nicht face-wink)
@echo off & setlocal EnableDelayedExpansion
REM Path common definitions
set DLETTER=C:
set "BASE=%DLETTER%\DHL\tomcat\webapps\os\Schnittstellen\DSI\M78"  

REM CustomerID definition
FOR /F %%g IN ('dir /b /AD "%BASE%"') DO (  
    SET "CLNUMBER=%%g"  
    REM Copy source to target
    set "SOURCE=%BASE%\!CLNUMBER!\PDF"  
    set "TARGET=%DLETTER%\DHL\tomcat\webapps\os\clientfiles\M78\!CLNUMBER!\PDF"  

    move "!SOURCE!\*.pdf" "!TARGET!\"  
)
bastla
bastla 14.05.2016 aktualisiert um 00:57:23 Uhr
Goto Top
@ icybox

Zum Thema "bräuchte man hier aber eigentlich nicht" wäre auch noch das /y nach dem move zu nennen ... face-wink

... und anstelle der for /f + dir /b-Variante (bei der ich wenigstens ein /ad ergänzen würde) gäbe es dann noch for /d ...

Grüße
bastla
schmitho
schmitho 14.05.2016 um 09:44:47 Uhr
Goto Top
Danke dafür, ich werde das am Montag mal auf der Arbeit ausprobieren!

Eine Frage hätte ich noch: In Zeile 4 hast du die Variable + Pfad mit Hochkommas versehen und in Zeile 7 die Variable aus Zeile 4 auch, ist quasi doppelt gemoppelt. Ist das ein Versehen, oder muß das so sein?
129148
129148 14.05.2016 aktualisiert um 09:55:53 Uhr
Goto Top
Zitat von @schmitho:

Danke dafür, ich werde das am Montag mal auf der Arbeit ausprobieren!

Eine Frage hätte ich noch: In Zeile 4 hast du die Variable + Pfad mit Hochkommas versehen und in Zeile 7 die Variable aus Zeile 4 auch, ist quasi doppelt gemoppelt.
Das ist für den Fall das Leer oder Sonderzeichen im Pfad vorkommen, ist zwar jetzt nicht der Fall aber wenn sie da sind bist du gerüstet
Ist das ein Versehen, oder muß das so sein?
Nein das ist kein Versehen sondern Vorbeugung wenn Leer oder Sonderzeichen in der Variablen vorkommen.

Wenn die Anführungszeichen vor der Variablen und am Ende des Wertes stehen landen diese nicht in der Variablen selber, sie stellen nur sicher das der komplette Wert in der Variablen landet, bei Sonderzeichen z.B.
Man kann diese auch weglassen, aber später bei der Verwendung sollte man immer Anführungszeichen um die Variable "%var%" setzen, denn man weiß ja nie wer die Variablen mal mit einem Pfad der Leerzeichen beinhaltet bestückt. Wäre das nämlich der Fall und du verwendest keine Anführungszeichen, würde der Move oder dir Befehl fehlschlagen!