mannekl
Goto Top

Ordner anzeigenOrdner auswaehlenDateien kopieren

Orner anzeigen>Orner auswaehlen>Dateien kopieren

Hallo,
brauch wieder mal Eure Hilfe bei einer Lösungsumsetzung.
Muss täglich ca. 300 Einzeldateien mit den Windows-Explorer(Win2000/XP) manuell aus jeweils 12 Odnern in einen anderen (Zielordner) zur Weiterverarbeitung kopieren.Dabei kommt es manchmal vor , dass Dateinen mehrmals in den Zielordner kopiert werden, was fatale Folgen hat.Meine Frage, Kann man mit einen Batch den ganzen Vorgang sicherer machen?Mein Vorschlag:1.Anzeige der Ordner unter LW: T\Bestellungen\(12 Ordner,sind immer die selben:zB:Trocken,Frische,Fleisch,TKK....) im cmd-Fenster.2.Auswahl eines Unter- Ordners(zB: 20070303D2_0814_Neuaufnahme;20070302D2_0744_Wochenwerbung...mehrere.)3.Kopieren der gesamten Einzeldateien(*.txt zB:TRO04509.ZU..ca.250)aus den ausgewählten Unterordner nach LW S:\Order.4.Rückgabe einer Erfolgsmelung.

Wenn man dass nicht mit einem Batch machen kann, habt Ihr da eine andere Lösung?

Viele Grüsse
Manne

Content-Key: 52946

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

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

Member: ManneKL
ManneKL Mar 01, 2007 at 15:09:26 (UTC)
Goto Top
Hallo,
darf leider keine fremde Software auf meinen Rechner installieren, sondern nur lokal ,selbstgemachte kleine Hilfstools.danke für den Tipp.
Aber vielleicht kann mir jemand trotzdem ein kleines Skript entwickeln????
Vielen dank
Manne
Member: miniversum
miniversum Mar 01, 2007 at 18:05:39 (UTC)
Goto Top
Du meinst sowas (Halt ohne Fehlerabfrage)?
@echo off
setlocal enabledelayedexpansion

set dir1="D:"  
set dest="e:"  

set nummer=1
FOR /F "tokens=1 delims=" %%A in ('dir /b /AD %dir1%') do (  
echo !nummer!: %%A
set /a nummer=!nummer!+1
)
set /p OrdnerNr=Bitte Ordner aussuchen (1-%nummer%): 
set /a OrdnerNr=%OrdnerNr%-1
set dir2=
FOR /F "skip=%OrdnerNr% tokens=1 delims=" %%A in ('dir /b /AD %dir1%') do if not defined dir2 set dir2=%%A  

ECHO Copy %dir1%\%dir2%\Datei.txt %dest%\

pause

miniversum
Member: ManneKL
ManneKL Mar 02, 2007 at 09:24:02 (UTC)
Goto Top
Hallo miniversum,
danke für Deine Super-Hilfe, aber nach meinen Anpassungen funktioniert nicht alles.

Hier das angepasste Skript:

@echo off
setlocal enabledelayedexpansion

set dir1="T:\Bestellungen\"  
set dest="C:\order01\"  

set nummer=1
FOR /F "tokens=1 delims=" %%A in ('dir /b /AD %dir1%') do (  
echo !nummer!: %%A
set /a nummer=!nummer!+1
)
set /p OrdnerNr=Bitte Ordner aussuchen (1-%nummer%): 
set /a OrdnerNr=%OrdnerNr%-1
set dir2=
FOR /F "skip=%OrdnerNr% tokens=1 delims=" %%A in ('dir /b /AD %dir1%') do if not defined dir2 set dir2=%%A  

ECHO Copy %dir1%\%dir2%\*.zu %dest%
pause

Beim erste Stepp wenden die Orner angezeigt(1-16).
weiter mit der Auswahl...

1....bei "Bitte Orner aussuchen<1-16>:1 , bei Eingabe 1 bringt er"tokens=1 delims=""ist syntaktisch an dieser

Stelle nicht verarbeitbar.Copy "T:\Bestellungen\"\\*.zu "C:\order01\",Drücken Sie eine beliebige

Taste...(anschliessend schliesst er das Fenster,ohne etwas gemacht zu haben).
2.....bei "Bitte Orner aussuchen<1-16>:2 , bei Eingabe 2(2 ist Frische,oder weiterer Zahl),bringt er Copy

"T:\Bestellungen\"\Frische\*.zu "C:\order01\"...auch ohne Erfolg.

Was kann da noch verändert werden, damit man auch die Unterordner zB:unter Frische (Unterordner) angezeigt ,man

einen bestimmten auswählen und dessen Inhalt(*.zu-Dateien) nach order01 kopieren kann?

Danke schon mal im vorraus..
Manne
Member: Biber
Biber Mar 02, 2007 at 09:56:26 (UTC)
Goto Top
Moin ManneKL,

probier es so weiter...

@echo off
setlocal enabledelayedexpansion

set "dir1=T:\Bestellungen"  
set dest="C:\order01\"  

set nummer=1
FOR /F "tokens=1 delims=" %%A in ('dir /b /s /AD %dir1%') do (  
echo !nummer!: %%A
set /a nummer=!nummer!+1
)
set /a nummer=!nummer!-1

set /p OrdnerNr=Bitte Ordner aussuchen (1-%nummer%): 
If %OrdnerNr% GEQ 1 set /a OrdnerNr-=1
If %OrdnerNr% NEQ 0 set "ToSkip=skip=%OrdnerNr%"  
REM Ein "Skip=0" würde zu Fehlern führen  
set dir2=
FOR /F "%ToSkip% delims=" %%A in ('dir /b /s /AD %dir1%') do if not defined dir2 set dir2=%%A  

ECHO Copy %dir1%\%dir2%\*.zu %dest%
pause

Gruss Biber
Member: miniversum
miniversum Mar 02, 2007 at 17:54:54 (UTC)
Goto Top
@echo off
setlocal enabledelayedexpansion

<b>set dir1="T:\Bestellungen"</b>  
<b>set dest="C:\order01"</b>  

set nummer=1
FOR /F "tokens=1 delims=" %%A in ('dir /b /AD %dir1%') do (  
echo !nummer!: %%A
set /a nummer=!nummer!+1
)
set /p OrdnerNr=Bitte Ordner aussuchen (1-%nummer%): 
<b>if %OrdnerNr% gtr 1 set /a OrdnerNr=%OrdnerNr%-1</b>
set dir2=
FOR /F "skip=%OrdnerNr% tokens=1 delims=" %%A in ('dir /b /AD %dir1%') do if not defined dir2 set dir2=%%A  

ECHO Copy %dir1%\%dir2%\*.zu %dest%
pause

Hier meine Änderungen an dem Code in FETT.

miniversum
Member: Biber
Biber Mar 02, 2007 at 18:21:42 (UTC)
Goto Top
Hmmm, miniversum,

if %OrdnerNr% gtr 1 set /a OrdnerNr=%OrdnerNr%-1

...dann macht er aber auch ein "Skip=1", wenn der OrdnerNr 1 gewählt wird.

---> dann sichert er entweder den zweiten Ordner (falls vorhanden) oder greift ins Leere, falls nur eine Zeile zurückgeliefert wird.

Gruss
Biber
Member: miniversum
miniversum Mar 02, 2007 at 18:43:59 (UTC)
Goto Top
achmann so ist das wenn man schnell drauf los tipt.
Heute ist echt ncith mein Tag, erst die PCwelt mit dem supertollen Vistahack kaput und nun das noch ;)
ich meinte natürlich größer gleich 1 also
if %OrdnerNr% geq 1 set /a OrdnerNr=%OrdnerNr%-1

miniversum
Member: Biber
Biber Mar 03, 2007 at 11:10:55 (UTC)
Goto Top
Moin miniversum,

da hatte ich mich wohl zu kurz gefasst...
Ich meinte:
if %OrdnerNr% gtr 1 set /a OrdnerNr=%OrdnerNr%-1
Wenn %OrdnerNr% vorher gleich 1 ist, ist er hinterher...? Richtig, immer noch 1.
Nur: dieser Wert 1 wird jetzt für die "Skip=.."-Klausel verwendet.
Und das ist fachlich nicht richtig. Beim Ordner1 muss ja nicht geskipt werden, aber ein "skip=0" ist syntaktisch nicht erlaubt.
Deswegen mein Rumgeeiere oben.

Ein bisschen kürzer wäre so, aber im Kern stimmte es IMHO schon.
@echo off & setlocal enabledelayedexpansion

set "dir1=T:\Bestellungen"  
set dest="C:\order01\"  

<b>set /a nummer=0</b>
FOR /F "tokens=1 delims=" %%A in ('dir /b /s /AD %dir1%') do (  
<b>      set /a nummer=!nummer!+1</b>
<b>      echo !nummer!: %%A </b>
)
set /p OrdnerNr=Bitte Ordner aussuchen (1-%nummer%): 
If %OrdnerNr% GEQ 1 set /a OrdnerNr-=1
If %OrdnerNr% NEQ 0 set "ToSkip=skip=%OrdnerNr%"  
REM Ein "Skip=0" würde zu Fehlern führen  
set dir2=
FOR /F "%ToSkip% delims=" %%A in ('dir /b /s /AD %dir1%') do if not defined dir2 set dir2=%%A  

ECHO Copy %dir1%\%dir2%\*.zu %dest%
pause

Gruss
Biber
Member: Biber
Biber Mar 05, 2007 at 09:45:58 (UTC)
Goto Top
Öhmmm, ManneKL,

liest Du noch mit? Bzw. passt das bei Dir?

Gruss
Biber
Member: ManneKL
ManneKL Mar 05, 2007 at 11:10:55 (UTC)
Goto Top
Hallo Biber,
ja, war bis heut leider familiär verhindert und komme jetzt erst wieder zum testen.
Also, habe Dein letztes Skript angepasst, aber es funktioniert noch nicht.Zeigt leeres cmd-Fenster in den der Kuser ober blinkt.Teste es gleich weiter.
Bei der Variante von miniversum komme ich auch nur bis dahin, wo die ersten Ordner angezeigt und ich durch Ziffern einen auswählen kann.
Dein Skript:
echo off & setlocal enabledelayedexpansion

set "dir1=T:\Zuteilungen"
set dest="C:\order01\"

set /a nummer=0
FOR /F "tokens=1 delims=" %%A in ('dir /b /s /AD %dir1%') do (
set /a nummer=!nummer!+1
echo !nummer!: %%A
)
set /p OrdnerNr=Bitte Ordner aussuchen (1-%nummer%):
If %OrdnerNr% GEQ 1 set /a OrdnerNr-=1
If %OrdnerNr% NEQ 0 set "ToSkip=skip=%OrdnerNr%"
REM Ein "Skip=0" würde zu Fehlern führen
set dir2=
FOR /F "%ToSkip% delims=" %%A in ('dir /b /s /AD %dir1%') do if not defined dir2 set dir2=%%A

ECHO Copy %dir1%\%dir2%\*.zu %dest%
pause


Vielleicht kannst Du mir noch mal helfen????
Gruß
Manne
Member: Biber
Biber Mar 05, 2007 at 12:02:47 (UTC)
Goto Top
Moin ManneKL,

ich habe es bei mir noch mal simuliert mit [nur "SET Dir1=..." geändert]:
::---------------snipp ManneKL2.bat ---
@echo off & setlocal EnableDelayedExpansion
set "dir1=T:\Zuteilungen"  
set dest="C:\order01\"  
Set "dir1=f:\temp"  
set /a nummer=0
FOR /F "tokens=1 delims=" %%A in ('dir /b /s /AD %dir1%') do (  
set /a nummer=!nummer!+1
echo !nummer!: %%A 
)
set /p OrdnerNr=Bitte Ordner aussuchen (1-%nummer%):
If %OrdnerNr% GEQ 1 set /a OrdnerNr-=1
If %OrdnerNr% NEQ 0 set "ToSkip=skip=%OrdnerNr%"  
REM Ein "Skip=0" würde zu Fehlern führen  
set dir2=
FOR /F "%ToSkip% delims=" %%A in ('dir /b /s /AD %dir1%') do if not defined dir2 set dir2=%%A  

<b>ECHO Copy %dir2%\*.zu %dest%</b>
pause
Output am CMD-Prompt:
(=12:54:10  D:\temp=)
>f:\temp\ManneKL2.bat
1: f:\temp\smarttools
2: f:\temp\dirgraph
Bitte Ordner aussuchen (1-2):1
Copy f:\temp\smarttools\*.zu "C:\order01\"  
Drücken Sie eine beliebige Taste . . .

(=12:54:19  D:\temp=)
>f:\temp\ManneKL2.bat
1: f:\temp\smarttools
2: f:\temp\dirgraph
Bitte Ordner aussuchen (1-2):2
Copy f:\temp\dirgraph\*.zu "C:\order01\"  
Drücken Sie eine beliebige Taste . . .
works as designed...

[in der vorletzten Zeile habe ich noch die Variable %dir1% gestrichen... ist jetzt überflüssig.]

Aber:
In dem von dir geposteten Skript ist statt von "T:\Bestellung" jetzt von "T:\Zuteilung" die Rede...
Vielleicht ist das der falsche Pfad (keine Dateien dort)?

Gruss Biber
Member: ManneKL
ManneKL Mar 05, 2007 at 13:50:57 (UTC)
Goto Top
Hallo Biber,
habe Deine Version schon mehrmals verändert und verschiedene Varianten erfolglos ausprobiert.
Richtig ist der Pfad:T:\Zuteilungen, unter dem 16 Ordner sind und unter diesen wierderum Ordner , in den die txt-Dateien sich befinden, die nach C:\order01 kopiert werden solle.
Bei Deinem letzten Skript , zeigt er die ersten Auswahl-Ordner garnicht an, sondern fragt gleich"Bitte Ordner aussuchen(1-0):.

Alle Ordner sind gefüllt und die Pfadangaben angeglichen, aber bis jetzt komme ich nicht weiter.
Kannste noch mal nachschauen?
Manne
Member: Biber
Biber Mar 05, 2007 at 15:02:39 (UTC)
Goto Top
Hmmm, ManneKL,

ich kann jetzt weder gedanklich noch am CMD-Prompt diesen Effekt reproduzieren.

Sicher habe ich etwas übersehen, aber das wird vermutlich ein/e unbeteiligte/r Mitleser/in viel schneller entdecken als Dich (deshalb ist ja das 4-Augen-Prinzip so hilfreich).

Einzige Idee, die es etwas beschleunigen könnte:
- poste die ersten Zeilen der "Dir /s /b /Ad t:\Zuteilung"
-und/oder setze nach der Zeile "set /a nummer=0" eine Zeile mit "Echo on" rein und lass das Batchfragment laufen. Und poste diese halbe Seite Ausgabe.

[..ist ein Montach heute... *axelzuck*... und ein VollMondtach dazu...]
Gruss
Biber