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 Sortierer und Kopfchaos

Frage Entwicklung Batch & Shell

Mitglied: evotoy

evotoy (Level 1) - Jetzt verbinden

13.12.2009, aktualisiert 18.10.2012, 3326 Aufrufe, 6 Kommentare

Hi, ich bin neu hier ... also hallo an alle!! Ich hab hier schon häufig nützliche Beiträge gefunden und ich geh mal stark davon aus, dass es dieses Mal auch was wird ... ;)

Ich versuch mich grad mit meiner ersten Batch .. aber ich komm leider mit dem Syntax irgendwie nicht klar bzw. versteh ich den nur zur Hälfte - hab schon versucht hier dieverse Codezeilen zusammenzufriemeln - das wird allerdings langsam zum Drama

Das Script soll folgendes unabhängig vom absoluten Pfad machen:

- lese dateinamen (zb: 20091010-steuererklärung.txt)
- trenne die ersten neun zeichen ab (20091010-)
- trenne die letzten vier zeichen ab (.txt) - (falls nötig - Dateiendungen sollen ignoriert werden)
- checke, ob es bereits einen ordner mit dem restlichen Dateinamen gibt
ja - kopiere datei in den ordner
nein - erstelle ordner mit dem namen
- kopiere datei in den ordner
- gehe zur nächsten datei

mache das bis alle Dateien im Ordner abgearbeitet sind.

also ich denke, dass das nur ein paar Zeilen Code sind - ich bin auch schon bei @echo off - kleiner Scherz. Wie gesagt sitz ich hier schon ne Weile und versuch aus diversen Codes was zusammenzubauen - aber dann steht da immer so Zeug wie %%~dpni wo ich nicht weiss, wo das herkommt oder was das machen soll???

Ich würde mich rießig über ein funktionierendes Grundgerüst freuen ...

ich probier schon mal weiter ...

DANKE!!
Mitglied: Biber
13.12.2009 um 14:51 Uhr
Moin evotoy,

da ich dir den Spaß am Selber-Herausfinden nicht vorzeitig nehmen will, erstmal nur ein paar hoffentlich zielführende Tipps.
Zitat von evotoy:
- lese dateinamen (zb: 20091010-steuererklärung.txt)
So etwas kann immer der DIR /B-Befehl - probier es am CMD-Prompt.
- trenne die ersten neun zeichen ab (20091010-)
So etwas kann immer dir FOR /F-Anweisung sehr git - auch mit der Ausgabe des DIR/B-Befehls.
Wobei dann zu überlegen wäre, ob du "immer" die ersten 9 Zeichen abtrennen kannst (Namenssystematik ist wirklich stringent eingehalten) oder das nur machen willst mit allen Dateien der Wildcard "20*-*.*"
- trenne die letzten vier zeichen ab (.txt) - (falls nötig - Dateiendungen sollen ignoriert werden)
...oder vielleicht lieber die Extension %~xi einer Datei %i? Bzw nur den Namen %~ni statt Name+eXtension %~nxi.
- checke, ob es bereits einen ordner mit dem restlichen Dateinamen gibt
... evtl mit IF EXIST... ?
- aber dann steht da immer so Zeug wie %%~dpni wo ich
nicht weiss, wo das herkommt oder was das machen soll???
Das steht z.B bei SET /? und FOR /? beschrieben..

Ich würde mich rießig über ein funktionierendes Grundgerüst freuen ...
Noch rießiger aber, wenn du selbst austüftelst...
ich probier schon mal weiter ...
Und wenn es klemmt, sind wir da..

Grüße
Biber
Bitte warten ..
Mitglied: evotoy
13.12.2009, aktualisiert 18.10.2012
Ok ... ich seh schon ... ihr wollt mich leiden sehen ... alles klar - ich sitz ja noch - hab schon sehr lange keine codezeile mehr geschrieben ...

Danke erstmal biber ...

ok den dir befehl kenn ich noch ... muss ich das dann aber in ne datei umleiten und dann dort wieder auslesen?

Ich war schonmal soweit:

den Code hab ich in von hier: http://www.administrator.de/forum/dateien-sortieren-und-verschieben-per ...

01. @echo off & setlocal
02. for /d %%v in ("D:\Startverzeichnis\*.*") do (
03. pushd "%%v"
04. for %%i in (*.*) do (
05. if not exist "%%~ni\" md "%%~ni\" && echo Ordner erstellt: %%~dpni
06. move "%%i" "%%~ni\"
07. )
08. popd
09. )

das macht schonmal so was ähnliches. Mit Anpassung verschiebt das alle Dateien in einem Verzeichnis in einen neu erstellten Ordner mit dem Dateinamen. Jetzt hab ich mir gedacht, wenn ich da jetzt noch mit Token und Delims was mache müsste das ja schon fast reichen, oder??
Bitte warten ..
Mitglied: evotoy
13.12.2009 um 16:19 Uhr
HI ... also ich komm aus dem Lachen nicht mehr raus ... ich hab grad was zusammengewurschtelt - aber das echt krasse ist: es geht!!!!!! ?????????

Bitte fallt nicht vom Stuhl, wenn ihr den Code seht - ich mache sehr gerne professionelle Änderungen und ich versteh ja ledier nicht ganz, was ich da zusammengebaut hab - würde es aber echt gerne verstehen und besser machen

01.
@echo off 
02.
 
03.
dir/b>>Dateien.txt 
04.
 
05.
for /F "tokens=2 delims=-" %%i in (Dateien.txt) do (  
06.
    if not exist "%%~ni" md "%%~ni" 
07.
    move "*%%~ni.*" "%%~ni\" 
08.
    echo zu erstellen: %%~dpni 
09.
    echo Name = %%~ni 
10.
)
ok - ein erklärungsversuch:

ich geb mit dir die unsortierte Liste in eine Datei aus da steht dann folgendes drin:

20080512-auto.txt
20090103-haushalt.txt
20090112-haushalt.txt
20090112-steuer.txt
20090113-steuer.txt
20090116-haushalt.txt
20090116-steuer.txt
20090123-haushalt.txt
20090512-auto.txt
20090518-auto.txt
20090712-auto.txt
Dateien.txt
Sortieren.bat

so da spalte ich jetzt mit Hilfe einer ForSchleife mit token=2 und delims=- den Dateinamen ab -was ich da aber gar nicht verstehe ist wieso dann %%~ni überhaupt funktioniert????? und dann damit auch das md - ich mein ich setzte ja keine Variable und nichts??? naja und dann dacht ich mir wenn das schon geht ... dann könnte das verschieben ja auch so funktionieren - also hab ich mit Wildcards den Namen wieder zusammengesetzt *%%~ni.* und in den erstellten Ordner verschoben ...

Kann mir jemand sagen, warum dasfunktioniert? woher weiß %%~ni was aus der Textdatei ausgelesen wurde? Für %%~ni ist das was in der txt steht doch nur noch ein string, oder?

Kurios???


[Edit Biber] Codetags nachgetragen [/Edit]
Bitte warten ..
Mitglied: miniversum
13.12.2009 um 19:37 Uhr
Also so hät ichs auch gemacht.. naaj so ähnlich.
Hier mal deine Variante mit ein paar änderungen die ich gemacht hätte. das erklärt dann auch deine Frage:
01.
@echo off 
02.
for /F "tokens=2 delims=-" %%i in ('dir/b') do ( 
03.
md "%%~ni" 2>NUL 
04.
move "*%%~ni.*" "%%~ni\" 
05.
echo zu erstellen: %%~dpni 
06.
echo Name = %%~ni 
07.
)
Den Umweg über die Dateien.txt kannst du dir sparen und dem Befehl direkt in die For schreiben (siehe Zeile 2)
Die if exist beim md kannst du weglassen wenn du weißt das md auf ein bereits existierendes Verzeichnis immer auch funktioniert. Eine entstehende fehlermeldung wird dann mit 2>NUL nicht mehr angezeigt. Das es deshalb auch funktioniert wenn nichts in der Variabeln steht liegt daran das du in dem fall ein bereits existierendes Verzeichnis anlegen willst.
Bitte warten ..
Mitglied: evotoy
14.12.2009 um 22:00 Uhr
Hi,

hm ok ... verstehe - jetzt macht das schon eher sinn ... vielen dank!!
Bitte warten ..
Mitglied: evotoy
14.12.2009 um 22:27 Uhr
so ... ich hab nochmal ein bisschen gefeilt ... ich hab das exist jetzt doch drin behalten damit die Textausgabe nur bei wirklich neu erstellten Ordnern kommt. Hier ist die quasi fertige Batch - falls jemand was ähnliches vor hat ...
01.
@echo off 
02.
echo ______________///  Sortiertool \\\________________ 
03.
for /F "tokens=2 delims=-" %%i in ('dir/b') do (  
04.
    if exist "%%~ni" ( 
05.
        move "*%%~ni.*" "%%~ni\" 2>NUL 
06.
    ) ELSE ( 
07.
        echo Erstelle Ordner   : %%~dpni    
08.
        md "%%~ni" 2>NUL 
09.
        move "*%%~ni.*" "%%~ni\" 2>NUL 
10.
11.
12.
pause  
Danke nochmal für die Hilfe!!!!


[Edit Biber] Codetags nachgetragen [/Edit]
Bitte warten ..
Neuester Wissensbeitrag
Ähnliche Inhalte
Batch & Shell
Batch-Variable nach Stichworten aus TXT Datei durchsuchen (3)

Frage von Markus5579 zum Thema Batch & Shell ...

Batch & Shell
Dateinamen nach Zeichnen abschneiden - Batch-Shell (9)

Frage von cberndt zum Thema Batch & Shell ...

Batch & Shell
CMD Verschlüsslung ( Batch ) (11)

Frage von clragon zum Thema Batch & Shell ...

Batch & Shell
gelöst älteste dateien via batch löschen (6)

Frage von cali169 zum Thema Batch & Shell ...

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

Frage von patz223 zum Thema Windows Userverwaltung ...

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

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

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

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

Windows Netzwerk
Windows 10 RDP geht nicht (18)

Frage von Fiasko zum Thema Windows Netzwerk ...