Dateiname auslesen, Ordner erstellen, Dateien kopieren

27/10/2010 - 12:24 von Andreas H. | Report spam
Hallo,

folgenden Code habe ich (DOS-Nichtsblicker) mir aus verschiedenen
Foren usw zusammengeklebt.
Mit dem Code sollen Dateinamen ausgelesen werden, die Zeichen vor dem
ersten Unterstrich "_" als Benennung eines neuen Ordners verwendet
werden und dann alle Dateien, die mit dieser Zeichenkette anfangen, in
den neuen (dann bestehenden) Ordner kopiert werden.

@echo off & setlocal
set "Quelle=P:\temp\%username%\incoming\Test\Out\"
set "Ziel=P:\temp\%username%\incoming\Test\Out\"

for /f "delims=" %%i in ('dir /b /a-d "%Quelle%" 2^>nul') do
call :ProcessFile "%%i"
goto :eof

:ProcessFile
for /f "delims=_" %%a in (%1) do set "ID=%%a"
if not defined ID goto :eof
set "ZielOrdner=%Ziel%\%ID%"
if not exist "%ZielOrdner%" md "%ZielOrdner%" & ping -n 2 127.0.0.1

nul 2>&1 || (echo %ZielOrdner% konnte nicht erstellt werden) &


goto :eof
move /-Y "%Quelle%\%~1" "%ZielOrdner%\"

Der Code funktioniert im Wesentlichen. Blöderweise vergisst der Code
aber eine Datei zu kopieren, nàmlich diejenige, anhand der der Name
des zu erzeugenden Ordners ausliest. Beim zweiten Durchlauf, wenn
bereits ein entsprechent benannter Ordner existiert, werden alle
Dateien korrekt kopiert.

Woran könnte das liegen?
Ich hab bereits die ping -n...-Pause eingebaut, weil ich dachte, der
Ordner sei ggf noch nicht "fertig". Scheint aber nicht das Problem zu
sein...

Vielen Dank für Eure Hilfe schon jetzt!!!

Grüße aus Stuttgart,
Andreas

PS.: Peinlich, peinlich, aber wo kann ich lernen, was ich mit dem
vorstehenden Code überhaupt mache????
 

Lesen sie die antworten

#1 Herbert Kleebauer
27/10/2010 - 20:56 | Warnen spam
"Andreas H." wrote:

@echo off & setlocal
set "Quelle=P:\temp\%username%\incoming\Test\Out\"
set "Ziel=P:\temp\%username%\incoming\Test\Out\"

for /f "delims=" %%i in ('dir /b /a-d "%Quelle%" 2^>nul') do
call :ProcessFile "%%i"
goto :eof

:ProcessFile
for /f "delims=_" %%a in (%1) do set "ID=%%a"
if not defined ID goto :eof
set "ZielOrdner=%Ziel%\%ID%"
if not exist "%ZielOrdner%" md "%ZielOrdner%" & ping -n 2 127.0.0.1
>nul 2>&1 || (echo %ZielOrdner% konnte nicht erstellt werden) &
goto :eof
move /-Y "%Quelle%\%~1" "%ZielOrdner%\"

Der Code funktioniert im Wesentlichen. Blöderweise vergisst der Code
aber eine Datei zu kopieren, nàmlich diejenige, anhand der der Name
des zu erzeugenden Ordners ausliest. Beim zweiten Durchlauf, wenn
bereits ein entsprechent benannter Ordner existiert, werden alle
Dateien korrekt kopiert.

Woran könnte das liegen?



Ich vermute mal an dem "& goto :eof" in der Zeile

if not exist "%ZielOrdner%" .

weil der move Befehl dann nicht ausgeführt wird wenn der Zielordner
nicht existiert.




PS.: Peinlich, peinlich, aber wo kann ich lernen, was ich mit dem
vorstehenden Code überhaupt mache????



set /?
for /?
call /?
goto /?
if /?

Ähnliche fragen