Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Batch zum Dateien bewegen

Frage Entwicklung Batch & Shell

Mitglied: ToAsTyBoY

ToAsTyBoY (Level 1) - Jetzt verbinden

01.04.2010 um 13:57 Uhr, 3908 Aufrufe, 12 Kommentare

Das hier wird mein erster Beitrag bei euch =)

Bedanke mich schonmal im Vorraus für eure Antworten.

Ich hätte ein kleines Problem mit einem Script.
Meine Aufgabe war es, ein kleines Script zu schreiben, wenn ich hier Falsch bin, bitte verschieben.

SO, die Aufgaben stellung war folgende: Ein Kunde von uns bekommt in einen bestimten Ordner jede Minute eine Datei.
Da sich dieser Ordner in Kürzester Zeit selbst zu spamt, darf ich da ordnung reinbringen.
http://forum.fachinformatiker.de/windows-betriebssysteme/129906-batch-d ...

Meine Dateien haben im Moment immer das Format : test_31.03.10.13.30.abc
test = namen , dann das Datum und die hinteren 2 Zahlen sind die Uhrzeit. Am Ende hats noch platz für einen Kommentar.

Ich solte 3 verschiedene Skripte schreiben, eins um die Dateien nach Stunden (1 Uhr-24Uhr), eins nach Tagen (01Tag-30Tag/31Tag ) und eins nach Monaten ( Januar - Dezember) zu sortieren.
Dazu solten immer die passenden Ordner angelegt werden wenn sie nicht schon vorhanden sind.
Die Stunden und die Monate funktionieren Wunderbar, aber mit den Tagen hab ich im mom ein Problem.
Hier mal mein ,,Monatsscript" :
Code:

-- Dateien sortieren -th

-- Ordner anlegen fals nicht vorhanden

if not exist "J:\Script Jochen\temp\Januar" md "J:\Script Jochen\temp\Januar"
if not exist "J:\Script Jochen\temp\Februar" md "J:\Script Jochen\temp\Februar"
if not exist "J:\Script Jochen\temp\Maerz" md "J:\Script Jochen\temp\Maerz"
if not exist "J:\Script Jochen\temp\April" md "J:\Script Jochen\temp\April"
if not exist "J:\Script Jochen\temp\Mai" md "J:\Script Jochen\temp\Mai"
if not exist "J:\Script Jochen\temp\Juni" md "J:\Script Jochen\temp\Juni"
if not exist "J:\Script Jochen\temp\Juli" md "J:\Script Jochen\temp\Juli"
if not exist "J:\Script Jochen\temp\August" md "J:\Script Jochen\temp\August"
if not exist "J:\Script Jochen\temp\September" md "J:\Script Jochen\temp\September"
if not exist "J:\Script Jochen\temp\Oktober" md "J:\Script Jochen\temp\Oktober"
if not exist "J:\Script Jochen\temp\November" md "J:\Script Jochen\temp\November"
if not exist "J:\Script Jochen\temp\Dezember" md "J:\Script Jochen\temp\Dezember"

--log file erstellen

dir /b *_* >files.log

--log file auslesen

For /F "delims=. Tokens=1-4*" %%i in (Files.log) do (

--Dateien verschieben

If %%j==01 move %%i.%%j.%%k.%%l.%%m "J:\Script Jochen\temp\Januar"
If %%j==02 move %%i.%%j.%%k.%%l.%%m "J:\Script Jochen\temp\Februar"
If %%j==03 move %%i.%%j.%%k.%%l.%%m "J:\Script Jochen\temp\Maerz"
If %%j==04 move %%i.%%j.%%k.%%l.%%m "J:\Script Jochen\temp\April"
If %%j==05 move %%i.%%j.%%k.%%l.%%m "J:\Script Jochen\temp\Mai"
If %%j==06 move %%i.%%j.%%k.%%l.%%m "J:\Script Jochen\temp\Juni"
If %%j==07 move %%i.%%j.%%k.%%l.%%m "J:\Script Jochen\temp\Juli"
If %%j==08 move %%i.%%j.%%k.%%l.%%m "J:\Script Jochen\temp\August"
If %%j==09 move %%i.%%j.%%k.%%l.%%m "J:\Script Jochen\temp\Septemper"
If %%j==10 move %%i.%%j.%%k.%%l.%%m "J:\Script Jochen\temp\Oktober"
If %%j==11 move %%i.%%j.%%k.%%l.%%m "J:\Script Jochen\temp\November"
If %%j==12 move %%i.%%j.%%k.%%l.%%m "J:\Script Jochen\temp\Dezember"



)

--log file löschen

del files.log

Kurz gesagt: es schaut welchen Dateinamen die Dateien in dem Ordner ( hier Temp auf meinem USB-Stick ( deshalb J:\ da ich mich auch daheim verscuhen wolte ))liegen und speichert die Namen als .txt ab.
Danach wird dieser an den Punkten sozusagen aufgespalten und die einzelnen Werte werden benutzt.
Hier mein ,,Tagesscript"
Code:

-- Dateien sortieren -th

-- Ordner anlegen fals nicht vorhanden

if not exist "J:\Script Jochen\temp\01Tag" md "J:\Script Jochen\temp\01Tag"
if not exist "J:\Script Jochen\temp\02Tag" md "J:\Script Jochen\temp\02Tag"
if not exist "J:\Script Jochen\temp\03Tag" md "J:\Script Jochen\temp\03Tag"
if not exist "J:\Script Jochen\temp\04Tag" md "J:\Script Jochen\temp\04Tag"
if not exist "J:\Script Jochen\temp\05Tag" md "J:\Script Jochen\temp\05Tag"
if not exist "J:\Script Jochen\temp\06Tag" md "J:\Script Jochen\temp\06Tag"
if not exist "J:\Script Jochen\temp\07Tag" md "J:\Script Jochen\temp\07Tag"
if not exist "J:\Script Jochen\temp\08Tag" md "J:\Script Jochen\temp\08Tag"
if not exist "J:\Script Jochen\temp\09Tag" md "J:\Script Jochen\temp\09Tag"
if not exist "J:\Script Jochen\temp\10Tag" md "J:\Script Jochen\temp\10Tag"
if not exist "J:\Script Jochen\temp\11Tag" md "J:\Script Jochen\temp\11Tag"
if not exist "J:\Script Jochen\temp\12Tag" md "J:\Script Jochen\temp\12Tag"
if not exist "J:\Script Jochen\temp\13Tag" md "J:\Script Jochen\temp\13Tag"
if not exist "J:\Script Jochen\temp\14Tag" md "J:\Script Jochen\temp\14Tag"
if not exist "J:\Script Jochen\temp\15Tag" md "J:\Script Jochen\temp\15Tag"
if not exist "J:\Script Jochen\temp\16Tag" md "J:\Script Jochen\temp\16Tag"
if not exist "J:\Script Jochen\temp\17Tag" md "J:\Script Jochen\temp\17Tag"
if not exist "J:\Script Jochen\temp\18Tag" md "J:\Script Jochen\temp\18Tag"
if not exist "J:\Script Jochen\temp\19Tag" md "J:\Script Jochen\temp\19Tag"
if not exist "J:\Script Jochen\temp\20Tag" md "J:\Script Jochen\temp\20Tag"
if not exist "J:\Script Jochen\temp\21Tag" md "J:\Script Jochen\temp\21Tag"
if not exist "J:\Script Jochen\temp\22Tag" md "J:\Script Jochen\temp\22Tag"
if not exist "J:\Script Jochen\temp\23Tag" md "J:\Script Jochen\temp\23Tag"
if not exist "J:\Script Jochen\temp\24Tag" md "J:\Script Jochen\temp\24Tag"
if not exist "J:\Script Jochen\temp\25Tag" md "J:\Script Jochen\temp\25Tag"
if not exist "J:\Script Jochen\temp\26Tag" md "J:\Script Jochen\temp\26Tag"
if not exist "J:\Script Jochen\temp\27Tag" md "J:\Script Jochen\temp\27Tag"
if not exist "J:\Script Jochen\temp\28Tag" md "J:\Script Jochen\temp\28Tag"
if not exist "J:\Script Jochen\temp\29Tag" md "J:\Script Jochen\temp\29Tag"
if not exist "J:\Script Jochen\temp\30Tag" md "J:\Script Jochen\temp\30Tag"
if not exist "J:\Script Jochen\temp\31Tag" md "J:\Script Jochen\temp\31Tag"

--log file erstellen

dir /b *_* >files.log

--log file auslesen

--Dateien verschieben

For /F "delims=. Tokens=1-4*" %%i in (Files.log) do (

If %%i==01 move %%i.%%j.%%k.%%l.%%m "J:\Script Jochen\temp\01Tag"
If %%i==02 move %%i.%%j.%%k.%%l.%%m "J:\Script Jochen\temp\02Tag"
If %%i==03 move %%i.%%j.%%k.%%l.%%m "J:\Script Jochen\temp\03Tag"
If %%i==04 move %%i.%%j.%%k.%%l.%%m "J:\Script Jochen\temp\04Tag"
If %%i==05 move %%i.%%j.%%k.%%l.%%m "J:\Script Jochen\temp\05Tag"
If %%i==06 move %%i.%%j.%%k.%%l.%%m "J:\Script Jochen\temp\06Tag"
If %%i==07 move %%i.%%j.%%k.%%l.%%m "J:\Script Jochen\temp\07Tag"
If %%i==08 move %%i.%%j.%%k.%%l.%%m "J:\Script Jochen\temp\08Tag"
If %%i==09 move %%i.%%j.%%k.%%l.%%m "J:\Script Jochen\temp\09Tag"
If %%i==10 move %%i.%%j.%%k.%%l.%%m "J:\Script Jochen\temp\10Tag"
If %%i==11 move %%i.%%j.%%k.%%l.%%m "J:\Script Jochen\temp\11Tag"
If %%i==12 move %%i.%%j.%%k.%%l.%%m "J:\Script Jochen\temp\12Tag"
If %%i==13 move %%i.%%j.%%k.%%l.%%m "J:\Script Jochen\temp\13Tag"
If %%i==14 move %%i.%%j.%%k.%%l.%%m "J:\Script Jochen\temp\14Tag"
If %%i==15 move %%i.%%j.%%k.%%l.%%m "J:\Script Jochen\temp\15Tag"
If %%i==16 move %%i.%%j.%%k.%%l.%%m "J:\Script Jochen\temp\16Tag"
If %%i==17 move %%i.%%j.%%k.%%l.%%m "J:\Script Jochen\temp\17Tag"
If %%i==18 move %%i.%%j.%%k.%%l.%%m "J:\Script Jochen\temp\18Tag"
If %%i==19 move %%i.%%j.%%k.%%l.%%m "J:\Script Jochen\temp\19Tag"
If %%i==20 move %%i.%%j.%%k.%%l.%%m "J:\Script Jochen\temp\20Tag"
If %%i==21 move %%i.%%j.%%k.%%l.%%m "J:\Script Jochen\temp\21Tag"
If %%i==22 move %%i.%%j.%%k.%%l.%%m "J:\Script Jochen\temp\22Tag"
If %%i==23 move %%i.%%j.%%k.%%l.%%m "J:\Script Jochen\temp\23Tag"
If %%i==24 move %%i.%%j.%%k.%%l.%%m "J:\Script Jochen\temp\24Tag"
If %%i==25 move %%i.%%j.%%k.%%l.%%m "J:\Script Jochen\temp\25Tag"
If %%i==26 move %%i.%%j.%%k.%%l.%%m "J:\Script Jochen\temp\26Tag"
If %%i==27 move %%i.%%j.%%k.%%l.%%m "J:\Script Jochen\temp\27Tag"
If %%i==28 move %%i.%%j.%%k.%%l.%%m "J:\Script Jochen\temp\28Tag"
If %%i==29 move %%i.%%j.%%k.%%l.%%m "J:\Script Jochen\temp\29Tag"
If %%i==30 move %%i.%%j.%%k.%%l.%%m "J:\Script Jochen\temp\30Tag"
If %%i==31 move %%i.%%j.%%k.%%l.%%m "J:\Script Jochen\temp\31Tag"

)


--log file löschen

del files.log

pause

Wenn ich die änderung hier mache
;; If %%i==test_31 move %%i.%%j.%%k.%%l.%%m "J:\Script Jochen\temp\31Tag";;

funktioniert es. Aber wenn es Dann in die Richtige Projektumgebung kommt müste man wieder alles änder.
Einfach ein ,*, davorsetzn funktioniert auch nicht.
Gibt es andere Platzhalter ?


Hoffe jemand hat ne Idee.

Greetz
Mitglied: ColdZero
01.04.2010 um 14:07 Uhr
Moin Moin,

vorabfrage, wie lange hast du für das Skript gebraucht zum schreiben? ^_^

dann nur mit * würde ich es evt nicht probieren, Probiere mal "*"
Diese " habe ich schon relativ oft vergessen an kleinen stellen und gesetzt dann ging es zu meist, manchmal lag der fehler auch wo anders.
Bitte warten ..
Mitglied: Tommy70
01.04.2010 um 14:09 Uhr
Hallo,

%1 und die Batchdatei mit dem Pfad als Parameter aufrufen.
Oder überhaupt den Pfad im Batch mit einer Variable definieren.
Bitte warten ..
Mitglied: ToAsTyBoY
01.04.2010 um 14:31 Uhr
kannst du das bitte mit einem Beispiel zeign ?
Bin absolut nicht fitt darin ^^
Bitte warten ..
Mitglied: ToAsTyBoY
01.04.2010 um 14:32 Uhr
WIe lange ? war schon nen gutes Stück arbeit, da ich mich durch probieren muste :P
Habe ein paar kleine Teile aus dem Internet zusammengefügt usw. da ich bis gestern noch kein Script geschrieben habe xD

EDIT:/ das mit den " hat leider auch nicht funktioniert.
Bitte warten ..
Mitglied: bastla
01.04.2010 um 15:06 Uhr
Hallo ToAsTyBoY und willkommen im Forum!

Da Du ja mehrere "Delimiter" verwenden kannst, sollte eigentlich für die Verschiebung nach Tagen folgende (ungetestete) Zeile genügen:
for /f "tokens=1-2* delims=_." %%i in (Files.log) do move %%i_%%j.%%k "J:\Script Jochen\temp\%%jTag"
Für das Anlegen der "Tages"-Ordner wäre übrigens
for /l %%i in (1,1,9) do md "J:\Script Jochen\temp\0%%iTag" 2>nul 
for /l %%i in (10,1,31) do md "J:\Script Jochen\temp\%%iTag" 2>nul
etwas eleganter ...

[Edit] Zweite Schleife wegen führender Null der "Tages"-Ordner hinzugefügt [/Edit]

Grüße
bastla
Bitte warten ..
Mitglied: ToAsTyBoY
01.04.2010 um 15:13 Uhr
werde dein Vorschlag glecih testen.
Könntest du noch eine kleine Beschreibung beifügen , was genau wo passiert das ich nebenher bischen was lernen kann und weiß was ich wo einfügn muss ?

=)

danke
Bitte warten ..
Mitglied: bastla
01.04.2010 um 15:53 Uhr
Hallo ToAsTyBoY!

Die beiden Schleifen für das Erstellen der "Tages"-Ordner (für die einstelligen Tage von 1 bis 9 muss die führende Null im Ordnernamen zusätzlich angegeben werden) sind jeweils Zählschleifen - kannst Du unter "for /?" nachlesen - wobei eben in %%i die Werte von 1 bis 9 bzw 10 bis 31 zur Verfügung gestellt werden.

Mit dem "2>nul" werden Fehlermeldungen unterdrückt - damit spare ich das "if not exist" ein und vermeide dennoch, dass Meldungen der Art "Ein Unterverzeichnis oder eine Datei mit dem Namen "J:\Script Jochen\temp\01Tag" existiert bereits." angezeigt werden.
Für das Verschieben selbst brauchst Du den Tag - in "test_31.03.10.13.30.abc" ist das, bei Unterteilung am "_" und jedem "." der Token 2 (daher %%j). Um den gesamten Dateinamen wieder zusammensetzen zu können, benötigst Du natürlich auch "test_" (= %%i). Alles, was nach dem zweiten Token folgt, nämlich "03.10.13.30.abc", muss nicht weiter zerlegt werden (dafür steht der Stern in "tokens=1-2*") und bildet damit Token 3 (%%k).

Die ersten beiden Trennzeichen ("_" und der erste Punkt) gehen durch die Zerlegung verloren und müssen daher selbst in den Dateinamen eingefügt werden

Da der Tag nun in %%j steht (und der Ordner dafür vorweg ja schon angelegt wurde), kannst Du den Zielpfad einfach unter Verwendung der Variablen "%%j" zusammenbauen ...
Eine sinnvolle Ergänzung wäre es, die Pfade für Quelle und Ziel vorweg in Variablen zu schreiben - macht den Batch leichter wart- bzw übertragbar; außerdem könntest Du (wenn sie nicht für andere, zB Dokumentations-, Zwecke benötigt wird) die Datei "files.log" einsparen und direkt in der Schleife die Dateinamen ermitteln. Aus diesen Überlegungen ergäbe sich dann etwa:
01.
@echo off & setlocla 
02.
set "Quelle="J:\Ein bestimmter Ordner beim Kunden" 
03.
set "Ziel=J:\Script Jochen\temp" 
04.
 
05.
for /l %%i in (1,1,9) do md "%Ziel%\0%%iTag" 2>nul  
06.
for /l %%i in (10,1,31) do md "%Ziel%\%%iTag" 2>nul 
07.
 
08.
pushd "%Quelle%" 
09.
for /f "tokens=1-2* delims=_." %%i in ('dir /b *_*') do move %%i_%%j.%%k "%Ziel%\%%jTag" 
10.
popd
Grüße
bastla
Bitte warten ..
Mitglied: ColdZero
01.04.2010 um 16:03 Uhr
Mal kurz eingeschmissen ich bastel ja viel mit Batch, aber so extrem nun auch wieder nicht.

Alles nach und nahc selbst beigebracht oder aus büchern bzw Internetseiten?

Wenn aus büchern oder gewissen INET seiten wo sowas gut beschrieben steht, wäre echt geil wenn ihr die Posten könntet, dann favo ich mir die mal oder werd sie kaufen.
Danke
Bitte warten ..
Mitglied: ToAsTyBoY
01.04.2010 um 16:12 Uhr
Also, erstmal ein dickes Lob von mir =)
Funktioniert Klasse und sogar ich habs kappiert :D

Ganz herzlcihen dank ^^
Bitte warten ..
Mitglied: bastla
01.04.2010 um 16:31 Uhr
@ColdZero
ich bastel ja viel mit Batch, aber so extrem nun auch wieder nicht.
Wie, Du ortest hier "Batch-Extremisten"?

Buchtipps von mir leider Fehlanzeige, und was Webseiten anlangt - eine der beiden, die ich empfehlen würde (die, wo's viel von einem gewissen Biber zu lernen gibt), hast Du ja schon gefunden, und als zweiten Hinweis könnte ich noch Rob van der Woude's Scripting Pages anbieten - ansonsten vor allem: "learning by doing" ...

Grüße
bastla
Bitte warten ..
Mitglied: bastla
01.04.2010 um 16:32 Uhr
Hallo ToAsTyBoY!

Freut mich (beides ), und danke für die Blumen ...

Grüße
bastla
Bitte warten ..
Mitglied: ColdZero
01.04.2010 um 16:38 Uhr
Danke, direkt mal gesavet die Rob seite.

Der Biber ist bei mir glaube ich bisher nie in erscheinung getreten, aber gut zu wissen das der was zum lernen hat, du hast ja auch ne menge ahnung.

Komme mittlerweile eh bei allen problemen die sich net durch eine Suchmaschine lösen lassen hier her was IT angeht ^^ Hier findet man(n) immer jemanden.

Gruß Zero
Bitte warten ..
Neuester Wissensbeitrag
Ähnliche Inhalte
Batch & Shell
gelöst Per Batch Dateien in einen Ordner - ext. Festplatte übertragen (2)

Frage von tocksick zum Thema Batch & Shell ...

Windows Server
Zuordnung von Netzlaufwerken mit Hilfe von Batch-Dateien (4)

Frage von doc-jochim zum Thema Windows Server ...

Heiß diskutierte Inhalte
Windows Userverwaltung
Ausgeschiedene Mitarbeiter im Unternehmen - was tun mit den AD Konten? (29)

Frage von patz223 zum Thema Windows Userverwaltung ...

Viren und Trojaner
Aufgepasst: Neue Ransomware Goldeneye verbreitet sich rasant (20)

Link von Penny.Cilin zum Thema Viren und Trojaner ...

LAN, WAN, Wireless
FritzBox, zwei Server, verschiedene Netze (20)

Frage von DavidGl zum Thema LAN, WAN, Wireless ...

Windows Netzwerk
Windows 10 RDP geht nicht (18)

Frage von Fiasko zum Thema Windows Netzwerk ...