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

Batch ID aus Dateiname auslesen und Ordner erstellen

Frage Entwicklung Batch & Shell

Mitglied: Naik0n

Naik0n (Level 1) - Jetzt verbinden

06.02.2008, aktualisiert 28.02.2008, 7174 Aufrufe, 5 Kommentare

Hallo zusammen,

Ich habe gerade ein wenig in der Datenbank geforstet und konnte nicht wirklich etwas finden wonach ich eigendlich suche.

Folgendes Problem habe ich.

Es befinden sich lauter Files in einem Ordner:
D005546_1.pdf
D005546_2.pdf
D877888_1.pdf
D145658_1.pdf

P005546_1.jpg
P871786_1.jpg
P871786_2.jpg
P010505_1.jpg
P877888_1.jpg
P877888_2.jpg

alles nach dem "P" oder "D" bis zum "_" ist eine ID, Beispiel: 005546 oder 871786.

Es soll die ID ausgelesen werden und ein Ordner dazu auf C:\IDs\ erstellt werden, Beispiel: C:\IDs\005546
in den ordner sollen dann Alle files die diese ID enthalten. Also: D005546_1.pdf, D005546_2.pdf, P005546_1.jpg alle in den Ordner "005546"

Ich hoffe mir kann da jemand bei meinem Problemchen helfen, denn ich kenne mich mit Batch nicht all zu gut aus.

Vielen Dank im Voraus!

Sollte dies machbar sein hätte ich da noch ein etwas komplexeres Problem :D
Mitglied: bastla
06.02.2008 um 15:33 Uhr
Hallo Naik0n und willkommen im Forum!

Versuch es so (aber besser erst einmal mit Testdaten ):
01.
@echo off & setlocal 
02.
set "Quelle=D:\Ordner" 
03.
set "Ziel=C:\IDs" 
04.
 
05.
for /f "delims=" %%i in ('dir /b /a-d "%Quelle%" 2^>nul') do call :ProcessFile "%%i" 
06.
goto :eof 
07.
 
08.
:ProcessFile 
09.
for /f "delims=_" %%a in (%1) do set "ID=%%a" 
10.
if not defined ID goto :eof 
11.
set ID=%ID:~1% 
12.
set "ZielOrdner=%Ziel%\%ID%" 
13.
if not exist "%ZielOrdner%" md "%ZielOrdner%" || (echo %ZielOrdner% konnte nicht erstellt werden) & goto :eof 
14.
move /-Y "%Quelle%\%~1" "%ZielOrdner%\"
Soferne es sich hier um eine einmalige Aktion handelt, sollte sich das Problem von Namenskollisionen (eine Datei gleichen Namens ist im Zielordner schon vorhanden) nicht stellen - trotzdem habe ich bei "move" zur Sicherheit den Schalter "/-Y" hinzugefügt, damit Du im Fall des Falles vor dem Überschreiben noch gefragt wirst.

Grüße
bastla
Bitte warten ..
Mitglied: Biber
06.02.2008 um 16:52 Uhr
Moin bastla,

Vorschlag zur Vereinfachung:
01.
@echo off & setlocal 
02.
set "Quelle=D:\Ordner" 
03.
set "Ziel=C:\IDs" 
04.
 
05.
for %%i in ("%Quelle%\D*_*.pdf" "%quelle%\P*_*.jpg") do call :ProcessFile "%%~nxi" 
06.
goto :eof 
07.
 
08.
:ProcessFile 
09.
for /f "delims=PD_" %%a in (%1) do set "ID=%%a" 
10.
set "ZielOrdner=%Ziel%\%ID%" 
11.
if not exist "%ZielOrdner%" md "%ZielOrdner%" || (echo %ZielOrdner% konnte nicht erstellt werden) & goto :eof 
12.
move /-Y "%Quelle%\%~1" "%ZielOrdner%\"
Grüße
Biber
Bitte warten ..
Mitglied: bastla
06.02.2008 um 17:05 Uhr
@Biber

Vereinfachung ja, allerdings auch Einschränkung hinsichtlich Anfangsbuchstaben und Dateitypen (dass auch ein Ordner mit dem verwendeten Suchmuster "D*_*.pdf" gefunden würde, ist aber eher unwahrscheinlich und daher kein ernstzunehmender Einwand ).

Grüße
bastla
Bitte warten ..
Mitglied: Naik0n
28.02.2008 um 12:28 Uhr
Hallo Zusammen,

Danke erstmal für die Vorschläge.
Ein Problem besteht weiterhin, er kopiert jeweils nur 1 File der ID in die ID ordner, der rest bleibt liegen, ausser ich führe den prozess nochmal aus, dann geht es.

Zudem kommt ein weiteres Problem hinzu, ich möchte während die Files verschoben werden die JPG Bilder in PDF umwandeln. ( Commandobefehl: convert "C:\file.jpg" "C:\file.pdf")

Alle Bilder mit der ID sollen am ende in einer PDF landen "ID.pdf"


danke
Bitte warten ..
Mitglied: Biber
28.02.2008 um 20:37 Uhr
...ich weiß gar nicht, wieso einige hier im Forum immer wieder seitenlange Lösungsskripte für wildfremde Hilfesuchende runtertippseln und viele dieser Hilfesuchenden, sollten sie sich nach Wochen überhaupt zurückmelden, dann melden "Habe es angepasst, läuft aber nicht" und wir diesen Fehler durch kontinuierliches Glaskugelreiben entfernen sollen....

.... gaaaanz laaaangsam bis 100 zähle.....

Okay, Freund Naik0n,
wenn der Schnipsel nicht aus dem geCALLten Block zurückkommt, dann fallen mir nur zwei mögliche Gründe dafür ein.
Der wahrscheinlichere davon ist, dass der Batch eben nicht mit der letzten Zeile dieses Blocks aufhört, sondern darunter noch weitere Zeilen folgen. Und die Rücksprunganweisung "goto :eof" fehlt.

Magst Du eventuell bitte Deinen hoch sensiblen Code posten, falls der nicht gerade im Original beim Nobelpreiskommitee in Stockholm unter Verschluss gehalten wird?

Danke
Biber

[Edit]
Okay, eben ist mir noch ein dritter Grund eingefallen, warum es nicht funktioneren könnte...
Ändere bitte die "IF NOT Exist"-Zeile so ab.
01.
if not exist "%ZielOrdner%" md "%ZielOrdner%" || ((echo %ZielOrdner% konnte nicht erstellt werden) & goto :eof)
[/Edit]
Bitte warten ..
Neuester Wissensbeitrag
Ähnliche Inhalte
Batch & Shell
Batch: .rar-Pakete automatisch Ordner erstellen und verschieben (2)

Frage von BowserMD zum Thema Batch & Shell ...

Batch & Shell
gelöst Batch Ordner erstellen und verschieben (6)

Frage von Fromeonly zum Thema Batch & Shell ...

Batch & Shell
Ordner erstellen ll Datei hinein kopieren (1)

Frage von heyalice 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 ...