OK, ich weiß jetzt, wo das Problem liegt. Das Einzige, was ich nicht getestet habe, sind mehrere Verzeichnisebenen, ich hab immer nur eine benutzt
Code: Select all
Umbenennen: Aerztliches Attest_19950411_0000.txt --> Kunden\Raab\briefe\1284.4
Kann nicht funktionieren, weil man beim Umbenennen keinen anderen Pfad angeben kann/darf.
Das nachfolgende Verschieben geht dann natürlich auch schief.
Lösung des Ganzen: in der
move.txt die abschließenden Backslashes weglassen und folgende Batchdatei (eigtl. wieder die vom Anfang

):
Code: Select all
@echo off
setlocal ENABLEDELAYEDEXPANSION
set target=C:\ziel
set path_file=move.txt
set num=1
echo.
set /p answer=Forfahren mit Umbenennen und Verschieben von Dateien in "%path_file%" nach "%target%" ^(j/n^)?
if /i "%answer%"=="j" goto DO_IT
goto :EOF
:DO_IT
if not exist "%target%" md "%target%" > NUL
for /F "tokens=*" %%J IN (%path_file%) DO (
set num=1
for /F "tokens=*" %%A IN ('dir /b /a-d /ogn "%%J"') DO (
echo.
set verz=%%~nxJ
set file=%%A
echo !num!
echo Umbenennen^: !file! --^> !verz!.!num!
ren "%%~J!b_slash!!file!" "!verz!.!num!" > NUL
echo Verschieben^: !verz!.!num!
move "%%~J!b_slash!!verz!.!num!" "%target%\" > NUL
set /a num=!num!+1
)
)
endlocal
Und wieder als UUE-Code:
Code: Select all
begin 644 rename_and_move.cmd
M0&5C:&\@;V9F#0H-"G-E=&QO8V%L($5.04),141%3$%9141%6%!!3E-)3TX-
M"@T*<V5T('1A<F=E=#U#.EQZ:65L#0IS970@<&%T:%]F:6QE/6UO=F4N='AT
M#0IS970@;G5M/3$-"@T*96-H;RX-"G-E="`O<"!A;G-W97(]1F]R9F%H<F5N
M(&UI="!5;6)E;F5N;F5N('5N9"!697)S8VAI96)E;B!V;VX@1&%T96EE;B!I
M;B`B)7!A=&A?9FEL924B(&YA8V@@(B5T87)G970E(B!>*&HO;EXI/R`-"FEF
M("]I("(E86YS=V5R)2(]/2)J(B!G;W1O($1/7TE4#0IG;W1O(#I%3T8-"@T*
M.D1/7TE4#0II9B!N;W0@97AI<W0@(B5T87)G970E(B!M9"`B)71A<F=E="4B
M(#X@3E5,#0H-"F9O<B`O1B`B=&]K96YS/2HB("4E2B!)3B`H)7!A=&A?9FEL
M924I($1/("@-"B`@("!S970@;G5M/3$-"B`@("!F;W(@+T8@(G1O:V5N<STJ
M(B`E)4$@24X@*"=D:7(@+V(@+V$M9"`O;V=N("(E)4HB)RD@1$\@*`T*("`@
M("`@("!E8VAO+@T*("`@("`@("!S970@=F5R>CTE)7YN>$H-"B`@("`@("`@
M<V5T(&9I;&4])25!#0H-"B`@("`@("`@96-H;R`A;G5M(0T*("`@("`@("!E
M8VAO("`@(%5M8F5N96YN96Y>.B`@("`A9FEL92$@+2U>/B`A=F5R>B$N(6YU
M;2$-"B`@("`@("`@<F5N("(E)7Y*(6)?<VQA<V@A(69I;&4A(B`B(79E<GHA
M+B%N=6TA(B`^($Y53`T*("`@("`@("!E8VAO("`@(%9E<G-C:&EE8F5N7CH@
M("`A=F5R>B$N(6YU;2$-"B`@("`@("`@;6]V92`B)25^2B%B7W-L87-H(2%V
M97)Z(2XA;G5M(2(@(B5T87)G970E7"(@/B!.54P-"B`@("`@("`@<V5T("]A
D(&YU;3TA;G5M(2LQ#0H@("`@*0T**0T*#0IE;F1L;V-A;`T*
`
end
sum -r/size 41502/801
Ursache des Problems ist, dass bei vorhandenem abschließenden Backslash die Variable
%%~nxJ leer bleibt und ich damit nicht an den Namen des Verzeichnisses rankomme, in dem die Datei liegt.
Hängt jedoch kein Backslash am Pfad, gibt
%%~nxJ den Namen der letzten Verzeichnisebene zurück. Und genau das brauche ich ja.
Ich hatte gedacht, dass man sich als Lösung mit
%%~npJ den Pfad und den Namen (mit Backslash ja leer) holt und dann nur den Backslash am Ende entfernt. Aber wie ich jetzt sehe, funktioniert das nicht, weil
%%~npJ natürlich den kompletten Pfad - auch über mehrere Ebenen - zurückgibt. Und das rename kann damit nichts anfangen.
Mögliche Lösung wäre die Benutzung eines Zusatzprogramms aus dem Linux-Bereich:
sed, der Streamline-Editor, der reguläre Ausdrücke versteht und man sich so in jedem Fall die letzte Verzeichnisebene als neuen Namen holen kann.
Oder hat sonst jemand noch ne andere Idee, wie das mit den kryptischen MS-Tools machbar wäre?
MfG Dalai