test12121
Goto Top

Batch - Dateinamen lesen und verschieben

Hallo zusammen,

In einem Ordner liegen verschiedene Textdateien, die in einen anderen Ordner verschoben werden sollen. Die Dateien sind nach dem folgenden Muster aufgebaut:

XXX_YYYY.txt

Wichtig dabei sind die ersten Buchstaben "XXX". Danach sollen Unterordner in dem Zielordner erstellt werden, wo dann die jeweiligen Textdateien abgelegt werden.

Ich habe bereits ein funktionierendes Skript, aber es wird nur für eine Datei durchgeführt. Das Skript sieht folgendermaßen aus:

@echo off
set "Quelle=C:\Users\user\Desktop\Batch_Test\Test"   
set "Ziel=C:\Users\user\Desktop\Batch_Test\Ziel"   

FOR /f "delims=" %%D in ('Dir /b %quelle%\*.*') do (  
	set varKOM=%quelle%\%%D 
)
		
FOR /f "delims=_ tokens=1" %%I in ('Dir /b %quelle%\*_*.*') do (    
	set varAuftrag=%%I
)

if not exist %ziel%\%varAuftrag% md %ziel%\%varAuftrag%
MOVE "%varKOM%" "%ziel%\%varAuftrag%\"  

Ich hätte gedacht, dass die Schleifen folgendermaßen kombiniert werden müssen, damit alle Dateien aus dem Quellordner verschoben werden. Dann habe ich jedoch den Fehler "Das System kann die angegebene Datei nicht finden"

@echo off
set "Quelle=C:\Users\user\Desktop\Batch_Test\Test"   
set "Ziel=C:\Users\user\Desktop\Batch_Test\Ziel"   

FOR /f "delims=" %%D in ('Dir /b %quelle%\*.*') do (  
	set varKOM=%quelle%\%%D 
	
	FOR /f "delims=_ tokens=1" %%I in ('Dir /b %quelle%\*_*.*') do (    
		set varAuftrag=%%I
		
		if not exist %ziel%\%varAuftrag% md %ziel%\%varAuftrag%
		MOVE "%varKOM%" "%ziel%\%varAuftrag%\"  
	)
)

Zudem habe ich noch das Problem, dass der Quellordner "Test" in der Praxis ein Ordner mit einem Leerzeichen ist. Wie würde man da vorgehen? In der For-Schleife kenne ich das mit Anführungszeichen aber in der String Variable funktioniert das bisher nicht.

Content-ID: 668315

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

Ausgedruckt am: 27.09.2024 um 01:09 Uhr

Ted555
Lösung Ted555 23.09.2024 aktualisiert um 16:21:59 Uhr
Goto Top
@echo off &setlocal
set "Quelle=C:\Users\user\Desktop\Batch_Test\Test"     
set "Ziel=C:\Users\user\Desktop\Batch_Test\Ziel"   
for %%a in ("%quelle%\*_*.txt") do (  
    for /f "tokens=1 delims=_" %%b in ("%%~na") do (  
        if not exist "%ziel%\%%b" md "%ziel%\%%b" >nul  
        move "%%a" "%ziel%\%%b\"  
    )
)
Immer Anführungszeichen um Pfade setzen, denn es kann immer vorkommen das es Ordner/Dateien mit Leerzeichen geben kann, als Skripter/Programmierer sorgt man also jeder Zeit vor!
Test12121
Test12121 24.09.2024 um 06:57:10 Uhr
Goto Top
Perfekt, danke!