infokern
Goto Top

Dateien automatisch in Ordner kopieren via Batch

Hallo ihr Lieben,

ich habe diesen Batchcode gefunden und er macht nahezu das, was ich benötige. Es existieren Word-Dateien, die mit einer kleinen Wortgruppe in Klammern beginnen bspw.: (Hallo wie gehts)Test1.docx. Das Programm soll nun einen Ordner erstellen, dessen Name aus dem Inhalt der Klammer (aber ohne Klammer) besteht und genau diese Dateien werden dann auch in den entsprechenden Ordner kopiert. Der Ordner hieße dann also "Hallo wie gehts".

Der folgende Code macht alles aber nur bis zum ersten Leerzeichen also "(Hallo". Kann mir jemand den Code so umstellen, dass er so läuft, wie ich es mir wünsche? Meine Programmierkenntnisse in diesem Bereich sind quasi nicht existent.^^

Vielen Dank und liebe Grüße

rem Anfang 

 
@echo off 

 
setlocal 
 

rem srcdir ist das Quellverzeichnis, Bitte anpassen 

set "srcdir=C:\Users\XXX"   

rem destdir ist das Zielverzeichnis, Bitte anpassen 

set "destdir=C:\Users\XXX\Desktop\Neuer Ordner (2)"   

  

for /f "tokens=1,*" %%i in ('dir "%srcdir%" /b /-p /a:-d /o:gne') do (   

  if not exist "%destdir%\(%%i(" md "%destdir%\(%%i)"   

  move "%srcdir%\%%i %%j" "%destdir%\(%%i)"   

      

  echo "%destdir%\(%%i)\%%j"   

  echo. 

) 


endlocal 

 
rem Ende 

Content-Key: 1417742928

Url: https://administrator.de/contentid/1417742928

Printed on: April 19, 2024 at 09:04 o'clock

Member: rubberman
rubberman Oct 22, 2021 updated at 16:35:03 (UTC)
Goto Top
Das ...
for /f "tokens=1,*" %%i in (...  
... sieht verkehrt aus.
Teste ...
for /f "delims=" %%i in (...  


EDIT:
Ah, die Zeichenfolge in Klammern soll %%i zugewiesen werden.
for /f "tokens=1,*delims=()" %%i in ('dir "%srcdir%" /b /-p /a:-d /o:gne') do for /f "tokens=*" %%k in ("%%j") do (  
Dann mit %%k statt %%j arbeiten.

Steffen
Member: Infokern
Infokern Oct 25, 2021 updated at 05:19:08 (UTC)
Goto Top
Moin Steffen,

vielen Dank für deine Hilfe und einen Schritt weiter bin ich jetzt. Der Code benennt die Ordner jetzt nahezu richtig, nur dass noch die Klammern enthalten sind. Er soll den Ordner erstellen und benennen nach dem Inhalt der Klammern aber ohne Klammern. Außerdem verschiebt er jetzt die Dateien nicht mehr.
Hier der Code, wie ich ihn mit deiner Hilfe angepasst habe:

for /f "tokens=1,*delims=()" %%i in ('dir "%srcdir%" /b /-p /a:-d /o:gne') do for /f "tokens=*" %%k in ("%%j") do (  
  if not exist "%destdir%\(%%i(" md "%destdir%\(%%i)"   

  move "%srcdir%\%%i %%k" "%destdir%\(%%i)"   

   echo "%destdir%\%%i\%%k"  
   echo.
Member: rubberman
rubberman Oct 25, 2021 at 09:38:58 (UTC)
Goto Top
OK, sagen wir der Dateiname ist
(aaa bbb) ccc ddd.ext
dann bekommst du
aaa bbb
in %%i (ohne Klammern, da die als Delimiters aus dem String fliegen)

 ccc ddd.ext
in %%j (noch mit vorangestelltem Leerzeichen)

ccc ddd.ext
in %%k (ohne Leerzeichen am Anfang)

Heißt, dort wo du die Klammern um %%i im Nachgang wieder brauchst (z.B. wenn du den ursprünglichen Dateiname für MOVE wieder zusammenbaust), must du sie wieder hinzufügen. Dort wo du sie nicht brauchst, lässt du sie weg, da %%i keine Klammern enthält.

Steffen
Member: Infokern
Solution Infokern Oct 27, 2021 updated at 06:26:51 (UTC)
Goto Top
Super vielen Dank Steffen.
Hier der komplette Code, falls das irgendwann jemand benötigen sollte.

rem Anfang

@echo off

setlocal

rem srcdir ist das Quellverzeichnis, Bitte anpassen
set "srcdir=C:\Users\XXX\Desktop\test"  
rem destdir ist das Zielverzeichnis, Bitte anpassen
set "destdir=C:\Users\XXX\Desktop\test2"  


for /f "tokens=1,*delims=()" %%i in ('dir "%srcdir%" /b /-p /a:-d /o:gne') do for /f "tokens=*" %%k in ("%%k") do (  
  if not exist "%destdir%\(%%i(" md "%destdir%\%%i"   

  move "%srcdir%\(%%i)%%j" "%destdir%\%%i"   

   echo "%destdir%\(%%i)\%%j"  
   echo.
    
  
)

endlocal

rem Ende