Top-Themen

Aktuelle Themen (A bis Z)

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 Dateinamen auslesen, zwischenspeichern, kürzen und als Ordnernamen benutzen

Mitglied: Bredack

Bredack (Level 1) - Jetzt verbinden

08.05.2008, aktualisiert 13.05.2008, 11541 Aufrufe, 13 Kommentare

Hiho,

ich hab mich in letzter Zeit nen bissel mit Batch beschäftigt und hab nun folgende Aufgabe:

Ich soll aus einem Ordner, der mehrere Dateien (glaub PDFs) enthält diese gruppieren, also die Dateien mit den entsprechenden Namen in den zugehörigen neuen Ordner zu verschieben.
D.h. es wird jeden Tag eine neue Datei hinzukommen und die hat in etwa die Namenstruktur wie 2008_04_06_blubb.pdf.
Die Aktuellest, also neueste Datei von dem Tag soll in dem Standardordner bleiben und erst dann verschoben werden, bis eine andere neue Datei auftaucht.

Habe mir das so gedacht, dass man den Dateinamen ausliest, dann halt in ner Variable zwischenspeichert und dann irgendwie kürzt, also dass dann nur zb: "2008_04" übrig bleibt, was man dann als Ordnernamen verwendet für den jeweiligen Monat.

Der Ordner mit dem Namen wird dann erstellt und die älteren Dateien mit den Daten werden dann dort hinein verschoben.

Ich bin mit dem File schon soweit, dass ich die Dateien auslesen und die neueste Filtern kann, aber kann halt nicht den Dateinamen kürzen...

Danke schonmal
Mfg
Bredack
Mitglied: Biber
08.05.2008 um 09:57 Uhr
Moin bredack,

vielleicht hilft Dir folgende Demo-Zeile am CMD-Prompt nach zweimaligem Lesen:
01.
>for %a in (d:\temp\20??_*.pdf) do @for /f "delims=_ tokens=1-2" %i in ("%~nxa") do @echo move %a %~dpa%i_%j\ 
02.
move d:\temp\2008_04_06_blubb.pdf d:\temp\2008_04\
[Eingabezeile hat ein ">" als Prompt; Zeile 2 ist Ausgabe]
In diesem Beispiel würden alle Dateien mit dem Muster "d:\temp\20??_*.pdf" angefasst, die Dateinamen zerlegt mit einem angenommenen Trennzeichen "_" und daraus ein Unterverzeichnisname aus den ersten zwei Tokens zusammengebraten.

Die Ermittlung/Filterung nach "neuester Datei" ist nicht Bestandteil der Zeile.

Grüße
Biber
Bitte warten ..
Mitglied: Bredack
08.05.2008 um 10:20 Uhr
Danke Biber für die schnelle Antwort, aber irgendwie klappt das nich so ganz

wozu is denn das ">"? Wenn ich es weglasse passiert gar nix, wenn es bleibt wird der Pfad nich gefunden.
was macht das ("%~nxa") und das hinter dem move?
%a is der dateiname?
%~dpa`
%i 1. Token?
%j 2. Token?

hab das mal eben auf mein Ordner übertragen: (ich teste noch mit *.txt files )

for %a in (H:\20??_*.txt) do @for /f "delims=_ tokens=1-2" %i in ("%~nxa") do @echo move %a %~dpa%i_%j\
rem move d:\temp\2008_04_06_blubb.pdf d:\temp\2008_04\
Bitte warten ..
Mitglied: Biber
08.05.2008 um 10:46 Uhr
Moin Bredack,

wozu is denn das ">"? Wenn ich es weglasse passiert gar nix, wenn es bleibt wird der Pfad nich gefunden.
Das ">" NICHT mit eingeben; es gehört einfach mit zu meinem CMD-Prompt.
Windows-Standard ist der Prompt "C:\Dokumente und Einstellungen\User\Eigene Dateien>" bzw $P$G (Anzeige Lw/Pfad gefolgt von einem Größer-Zeichen.
Bei mir ist es nur das Größerzeichen.
was macht das ("%~nxa") und das hinter dem move?
die Auflösung von dynamischen Variablen wird in der Hilfe zu FOR ("FOR /?" am CMD-Prompt eingeben) auf der letzten Seite sehr gut beschrieben.
Mit %~ni bekomme ich den (Datei-)Namen der Variablen %i, mit %~pi den Pfad, mit %~di den Drive etc...
%a is der dateiname?
%a ist die Laufvariable %a, die gefüllt wird mit allen %a's aus "FOR %a in (H:\20??_*.txt)"
Es würde sich nur mit der ersten FOR-Anweisung bei Dir ergeben.
01.
>for %a in (H:\20??_*.txt) do @echo %a 
02.
H:\2008_04_06_blubb.pdf 
03.
....(ggf. weitere Dateien)
%~dpa
"nur" Drive und Path von %a --->"H:\"
%i 1. Token?
%j 2. Token?
Jepp. Da ich bei %i anfange zu zählen (FOR /F ...%i in .."), werden alle sich ergebenden "Folgevariablen" alphabetisch hochgezählt...%i, %j, %k....

Spiel mal (nach Überfliegen der FOR /?-Hilfe) zwei Minuten mit den beiden FOR-Anweisungen einzeln am CMD-Prompt. Dann wirds klarer.

Wenn nicht...melde Dich.
Grüße
Biber
Bitte warten ..
Mitglied: Bredack
08.05.2008 um 11:02 Uhr
mh..joa mit dem ">" hätt ich drauf kommen müssen

Und mit der For /? hab ich auch schon nen weilchen gespielt

ich teste auch die Schleife zb mit:
for %a in (H:\20??_*.txt) do @echo %a

aber es passiert einfach nix, das Batchfile wird an der Stelle einfach abgebrochen, trotz "pause" etc, genauso sieht es bei deiner Zeile aus, weiss nich genau woran es liegt, aber könnte es an der Laufwerksbezeichnung liegen also das (H:\20??_*txt) ?

Und noch ne Frage: warum sind Laufvariablen manchmal mit einem %-Zeichen deklariert und mal mit 2? Also: for /F %%i in... oder for %i in ...

Danke schonmal
MfG Bredack
Bitte warten ..
Mitglied: Bredack
08.05.2008 um 11:18 Uhr
Ich antworte mir mal selbst :D

als mit
for /F "delims=_ tokens=1-2" %%i in ('dir /b 20??_*.txt') do @echo %%i_%%j
kann ich die ersten 2 Tokens ausgeben, soweit so gut, aber dafür muss die Batchdatei ja im gleichen Vereichnis sein, wie bekomm ich das hin, dass trotzdem der Pfad mit angegeben werden kann, da ja das "for %a in (H:\20??_*.txt) " nicht funktioniert.
Bitte warten ..
Mitglied: Biber
08.05.2008 um 11:26 Uhr
....nur die Ruhe, Bredack,

wenn ich irgendwo schreibe, "...am CMD-Prompt..", dann bedeutet das das Abfeuern der entsprechenden Halbzeile vom CMD-Prompt.

Dann haben alle dynamischen Variablen EIN Prozentzeichen (%i, %j, %a,...)
Damit kannst Du alles erstmal testen.

Wenn es klappt (oder "wenn es denn wider Erwarten jemals klappen sollte", wie wir Biber sagen), dann kannst Du es in einer Batchdatei dauerhaft der Nachwelt erhalten.
Erst dann bekommen die Laufvariablen ihr zweites Prozentzeichen (%%i, %%j,...%%~dpa..)
Sozusagen als Prüfsiegel "ohne größere Beanstandungen trocken getestet".

Bitte teste es erstmal am Prompt.

Grüße
Biber
Bitte warten ..
Mitglied: Bredack
08.05.2008 um 12:00 Uhr
Hey Biber,

Ok, bei den Test auf der Commandozeile geht alles glatt, nur wenn ich diese dann in einer Batch ausführe, die dann Befehle, wie
for /F %%a in ('dir /b 20??_*.txt') do echo %~dpa
bricht sie ab.
Es legt an dem "%~dpa" genausowenig gehn %~da, fa oder pa.
Keine Ahnung warum dies dort nicht geht.
Desshalb hat deine gepostete Codezeile nicht funktioniert, woran könnte das liegen?

und direkt den Pfad kann ich auch nicht angeben, weder auf der Commandoebene noch in der Batch Muss es bis jetz über das ('dir') Lösen

mfg Bredack
Bitte warten ..
Mitglied: bastla
08.05.2008 um 15:37 Uhr
Hallo Bredack!

Es legt an dem "%~dpa" genausowenig gehn %~da, fa oder pa.
Konsequenter Weise ist natürlich auch bei "%~dpa" ein zweites "%"-Zeichen fällig ...

Muss es bis jetz über das ('dir') Lösen
Das "dir" kannst Du Dir schenken, wenn Du, so wie Biber oben, nur ein "for " ohne "/f" verwendest.

Übrigens könntest Du beim Posten Deine Batch-Zeilen zwischen <code></code>-Tags stellen ...

Grüße
bastla
Bitte warten ..
Mitglied: Bredack
13.05.2008 um 09:19 Uhr
Danke erstmal für die Hilfe, soweit klappt das auch alles, nur hab ich mal ne Frage:
Wie kann ich in den Folgenden Zeilen direkt auf den Filenamen zugreifen?

01.
 set path=H:\ 
02.
 set Filter=20??_*.txt 
03.
 set Filter2=*.txt 
04.
  
05.
for /F %%i in ('dir /b /od /a -d %Filter%')do ( 
06.
  set newest=%%i  
07.
08.
 
09.
  for /F "delims=_ tokens=1-2" %%i in ('dir /b %Filter%') do ( 
10.
    if not exist %%i_%%j ( 
11.
      md %%i_%%j 
12.
13.
    if exist %%i_%%j ( 
14.
      echo %%i_%%j vorhanden! 
15.
    )else echo %%i_%%j nicht vorhanden! 
16.
    if /I %newest% NEQ %%i_%%j%Filter2%( 
17.
      copy %%i_%%j%Filter2% %path%\%%i_%%j\ 
18.
19.
  )
Also ich würde gerne halt in der If Abfrage mit dem NEQ nur die Dateien kopieren, die auch nich die neusten sind, nur komm ich da leider nich an den vollständigen Dateinamen ran, mit %%~nxi geht es leider nicht

MfG Bredack
Bitte warten ..
Mitglied: bastla
13.05.2008 um 09:29 Uhr
Hallo Bredack!

Die Schreibweise "%%~fi" liefert den Dateinamen mit vollständigem Pfad (nachzulesen in der Hilfe zu "for", zB mit "for /?"), allerdings nicht bei Verwendung von "for /F" - hier müsstest Du den Pfad dann selbst hinzufügen ...

Grüße
bastla
Bitte warten ..
Mitglied: Bredack
13.05.2008 um 09:33 Uhr
Hallo Bredack!

Die Schreibweise "%%~fi" liefert
den Dateinamen mit vollständigem Pfad
(nachzulesen in der Hilfe zu "for",
zB mit "for /?"), allerdings nicht
bei Verwendung von "for /F" ...

Grüße
bastla

Leider geht das nicht, da bei %%~fi nur das erste Token mit dem Pfad ausgeben wird, aber leider nicht der Komplette Dateiname
Bsp: Ausgabe: H:\2008 aber der Dateiname ist: 2008_05_13_bla.txt
Also sollte der komplette und richtige Dateiname ausgeben werden, nicht das erste Token %%i, geht das irgendwie?

MfG Bredack
Bitte warten ..
Mitglied: bastla
13.05.2008 um 09:40 Uhr
Hallo Bredack!

Bei nochmaligem Hinsehen war mir auch schon aufgefallen, dass es nicht beim Pfad klemmt ...

Ändere die Zeile
01.
for /F "delims=_ tokens=1-2" %%i in ('dir /b %Filter%') do (
auf
01.
for /F "delims=_ tokens=1-2*" %%i in ('dir /b %Filter%') do (
Du bekommst dadurch die einzelnen Namensbestandteile in die Variablen %%i (Jahr), %%j (Monat) und %%k (Rest ab Tag) - diese kannst Du wieder mit "%%i_%%j_%%k" zusammensetzen.

Grüße
bastla
Bitte warten ..
Mitglied: Bredack
13.05.2008 um 09:47 Uhr
Super, danke jetz klappt auch alles perfekt, dankeschön euch allen
Bitte warten ..
Ähnliche Inhalte
Batch & Shell

Dateinamen auslesen und in einer Schleife benutzen

gelöst Frage von TeholBeddictBatch & Shell12 Kommentare

Hallo Experten, ich kämpfe derzeit mit folgender Aufgabenstellung, welche ich per Batchskript lösen möchte: In einem Ordner sind 1 ...

Batch & Shell

Ordnernamen aus Dateinamen erstellen

Frage von Dr.ByteBatch & Shell1 Kommentar

Hi Gemeinde, benötige ein kleines Tool. Es liegen ca 100 Dateien in einem Ordner. Ich bräuchte nun ein Tool ...

Batch & Shell

Powershell Ordnername auslesen und verwenden

gelöst Frage von zamsi7Batch & Shell3 Kommentare

Hallo an alle, hoffe ich bin hier richtig und jemand kann mir helfen :) Ich möchte eine cert Datei ...

Batch & Shell

Mehrere Ordnernamen auslesen und in eine Variable schreiben

gelöst Frage von schmithoBatch & Shell5 Kommentare

Hallo zusammen, ich versuche verzweifelt eine Lösung eines Problems zu finden, wie ich den Namen mehrere Ordner in eine ...

Neue Wissensbeiträge
Drucker und Scanner
HP-MF-Drucker per Fax angreifbsr
Information von Lochkartenstanzer vor 19 StundenDrucker und Scanner

Endlich eine sinnvolle Verwendung für Faxe: Damit kann man offensichtlich den Drucker übernehmen. lks

Router & Routing

Das pfSense Buch ist jetzt für jeden kostenlos zu beziehen

Tipp von magicteddy vor 1 TagRouter & Routing2 Kommentare

Bisher war das Buch nur für zahlende Unterstützer verfügbar, jetzt steht für Jedermann kostenlos zur Verfügung. Siehe auch The ...

Firewall

Möglicherweise neue Sicherheitslücke in Mikrotik-Firmware

Information von LordGurke vor 3 TagenFirewall3 Kommentare

Hallo zusammen, vor ein paar Monaten gab es ja bereits eine Sicherheitslücke in der Firmware von Mikrotik-Routern, über welche ...

Erkennung und -Abwehr
Rechner hacken mit Cortana, auch Remote
Information von Lochkartenstanzer vor 4 TagenErkennung und -Abwehr3 Kommentare

heise berichtet über den Vortrag von der Blackhat Open Sesame: Picking Locks with Cortana. Einige Fehler sind schon gefixt, ...

Heiß diskutierte Inhalte
Windows Netzwerk
Performance bei Terminalserver
Frage von azizalexanderWindows Netzwerk20 Kommentare

Hallo zusammen, Ich wusste nicht in welches Thema meine Frage passt ich Bitte um Vergebung falls ich hier falsch ...

Exchange Server
Exchange 2013 - Unable to Relay nach extern, SuperMailer
Frage von leon123Exchange Server16 Kommentare

Hallo zusammen, ich brauch mal wieder eure Hilfe. Ich beschäftige mich gerade mit dem SuperMailer und erhalte vom Exchange ...

CPU, RAM, Mainboards
Xeon E5620: noch schnell genug?
Frage von ahussainCPU, RAM, Mainboards15 Kommentare

Hallo allerseits, ich habe die Möglichkeit, aus Restbeständen einen Tower mit Xeon E5620 CPU und 24 GB RAM zu ...

Peripheriegeräte
Steckdose(nleiste) mit Schwellwert für off und mit externem Taster
Frage von ahstaxPeripheriegeräte15 Kommentare

Hallo, ich suche eine Steckdose oder Steckdosenleiste mit externem Taster und Schwellwerterkennung. Zu realisieren ist folgendes: Ein PC soll ...