4sb3st
Goto Top

Batch - Ordner in neuen Ordner verschieben - Benennung in Abhängigkeit des Namens des zu verschiebenden Ordners

Hallo Community,

habe hier auf dieser Seite nachfolgendes Script von Administrator Thread


@echo off & setlocal
set "Ordner=D:\Dein Ordner"  
set "Separator= - "  

pushd "%Ordner%"  
for /f "delims=" %%i in ('dir /b/a-d "*%Separator%*"') do (  
    set "Name=%%~ni"  
    setlocal enabledelayedexpansion
    call set "Anfang=%%Name:%Separator%!Name:*%Separator%=!=%%"  
    for /f %%n in ('dir "!Anfang!%Separator%*.*"2^>nul^|findstr "Datei(en)"') do if %%n gtr 1 (  
        md "!Anfang!" 2>nul  
        move "!Anfang!%Separator%*.*" "!Anfang!">nul  
    )
    endlocal
    )
)
popd

Nun gilt das nur für Dateien. Ich versuche mir aus obigem Etwas zu basteln, was nur für Ordner anwendbar ist. Sprich für alles ohne Dateinamenerweiterung. face-smile Durch ein wenig reinlesen in das Thema Batch und dir, habe ich bereits versucht " ('dir /b/a-d "*%Separator%*"')" in " ('dir /b/ad "*%Separator%*"') zu ändern. Leider nicht der gewünschte Effekt. Weitere Ansatzpunkte, finde ich nicht, da ich absoluter Laie in dieser Sache bin. face-sad

Wenn mir Jemand die nötigen Änderungen aufzeigt, wäre ich durchaus dankbar.

Vielen Dank im Voraus.

MfG

Content-Key: 367886

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

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

Member: 4sb3st
4sb3st Mar 14, 2018 updated at 12:04:39 (UTC)
Goto Top
Nach unzähligem Lesen, Suchen und Ausprobieren bin ich zu (m)einer Lösung gekommen. Zumindest funktioniert es, wie ich es mir gewünscht habe.

Nun die Frage an die Profis: Gibt es Verbesserungspotential im Code? Vereinfachungen?

Und bitte erklärt mir die Zeile 9! :D Ich kann diese zeile nicht aufdröseln und verstehe einfach nicht, was diese Zeile tut. Meine Vermutung ist, dass es was mit der Stringsubstitution zu tun hat.

@echo off & setlocal
set "Ordner=Z:\Desktop\batch"  
set "Separator=_1234_"  

pushd "%Ordner%"  
for /d %%i in ("*%Separator%*") do (   
	set "Name=%%~ni"  
	setlocal enabledelayedexpansion
    	call set "Anfang=%%Name:%Separator%!Name:*%Separator%=!=%%"  
	for /d %%n  in ("*%Separator%*") do (  
		md "!Anfang!" 2>nul  
		move "%%i" "!Anfang!">nul  
	)
	endlocal
	)
)
popd