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 Batch Teile des Dateinamen auslesen

Mitglied: Eric01

Eric01 (Level 1) - Jetzt verbinden

04.05.2007, aktualisiert 09.05.2007, 12502 Aufrufe, 6 Kommentare

Hallo zusammen,

ich habe in verschiedenen Unterordnern mehrere Daten liegen

die Datei sehen wie folgt aus:

User1_2007_02_25_15_21.dss
User735_2007_02_25_15_21.dss.xml
User6_2007_02_25_17_53_0001.dss
User63_2007_02_25_16_53_0001.dss.xml

Der Username kann hinsichtlich der Länge variiren. Nach dem Usernamen kommt immer ein "_" und das aktuelle Jahr.

Ich möchte gern die Unterordner durchlaufen, den Usernamen auslesen und dann in separate Unterordner schieben.

Ist das machbar?

Danke und Grüße
Eric
Mitglied: mex604
04.05.2007 um 13:30 Uhr
mit jeder scriptsprache kein problem; dateiname als string einlesen, den string
durch den trenner "_" splitten, split[0] => username, verzeichnis erstellen,
datei verschieben. mit perl/python (php geht wohl auch) in ca 30min
gebaut.

mex
Bitte warten ..
Mitglied: bastla
04.05.2007 um 15:10 Uhr
Hallo Eric01 und willkommen im Forum!

Für das Aufteilen kannst Du so vorgehen (Eingabe direkt an der Commandline):
01.
for /f "tokens=1* delims=_" %i in ('dir /b D:\Daten\*.*') do @echo %i - %j
Analog dazu kannst Du die beiden Teile auch Variablen zuweisen.

Für die weitere Verarbeitung kann ich auf Basis Deiner bisherigen Informationen noch keinen Vorschlag machen ...

Grüße
bastla
Bitte warten ..
Mitglied: Biber
04.05.2007 um 15:16 Uhr
Moin Eric01,

wenn es nicht ganz so professionell gebaut werden muss, denn wäre es vom CMD-Prompt aus in etwa folgende Strategie:

a) Verzeichnisse anlegen:
01.
>for /f "delims=_ tokens=1,*" %i in ('Dir /b E:\Schnipsel\*_*_*.*') do @ECHO if not exist "c:\neu\%i" md "c:\neu\%i" 
02.
 
03.
if not exist "c:\neu\User1" md "c:\neu\User1" 
04.
if not exist "c:\neu\User735" md "c:\neu\User735" 
05.
if not exist "c:\neu\User6" md "c:\neu\User6" 
06.
if not exist "c:\neu\User63" md "c:\neu\User63"
b) Dateien kopieren
01.
>for /f "delims=_ tokens=1,*" %i in ('Dir /b E:\Schnipsel\*_*_*.*') do @ECHO copy "%~dpnxi_%j" c:\neu\%i\  
02.
copy "E:\Schnipsel\User1_2007_02_25_15_21.dss" c:\neu\User1\  
03.
copy "E:\Schnipsel\User735_2007_02_25_15_21.dss.xml" c:\neu\User735\  
04.
copy "E:\Schnipsel\User6_2007_02_25_17_53_0001.dss" c:\neu\User6\  
05.
copy "E:\Schnipsel\User63_2007_02_25_16_53_0001.dss.xml" c:\neu\User63\ 
Falls die neuen Ordner aus "..\Username\Jahr" bestehen sollen, dann sinngemäß...
01.
>for /f "delims=_ tokens=1,2,*" %i in ('Dir /b E:\Schnipsel\*_*_*.*') do @echo copy "%~dpnxi_%j_%k" c:\neu\%i\%j\  
02.
copy "E:\Schnipsel\User1_2007_02_25_15_21.dss" c:\neu\User1\2007\  
03.
copy "E:\Schnipsel\User735_2007_02_25_15_21.dss.xml" c:\neu\User735\2007\  
04.
copy "E:\Schnipsel\User6_2007_02_25_17_53_0001.dss" c:\neu\User6\2007\  
05.
copy "E:\Schnipsel\User63_2007_02_25_16_53_0001.dss.xml" c:\neu\User63\2007\ 
[ Natürlich ohne das "@ECHO" und ggf. mit MOVE statt COPY. Soll nur eine Skizze sein.]

Gruss
Biber
Bitte warten ..
Mitglied: Eric01
07.05.2007 um 10:40 Uhr
Hallo Biber,

danke für Deine Hilfe, hier mein komplettes Werk. Kann man sicherlich noch optimieren ;o)

01.
@echo off 
02.
@setlocal 
03.
REM +++++++++++++++++++++++++++++++++++++++++++++++++ 
04.
REM ++++++++ Verschieben von Dateien ++++++++++++++++ 
05.
REM +++++++++++++++++++++++++++++++++++++++++++++++++ 
06.
 
07.
REM +++ für den jeweiligen Unterordner 
08.
FOR /D %%i in (c:\Batch\Diktate\*.*) do (  
09.
   set varPfad=%%i 
10.
   call :loop) 
11.
 
12.
:loop  
13.
REM +++ Dateinamen und Pfad ermitteln 
14.
FOR /f "delims=" %%D in ('Dir /b %varPfad%\*_*_*.dss') do set varKOM=%varPfad%\%%D 
15.
 
16.
REM +++ Usernamen ermitteln und Datum ermitteln 
17.
FOR /f "delims=_ tokens=1-4" %%I in ('Dir /b %varPfad%\*_*_*.dss') do ( 
18.
	set varUser=%%I 
19.
	set varJahr=%%J 
20.
	set varMonat=%%K 
21.
	set varTag=%%L) 
22.
 
23.
REM +++ Ordner anlegen 
24.
if not exist c:\Batch\Archiv\%varUSER%    md c:\Batch\Archiv\%varUSER% 
25.
if not exist c:\Batch\Archiv\%varUSER%\ARCH_%varJahr%%verMonat%%varTag%\ md c:\Batch\Archiv\%varUSER%\ARCH_%varJahr%%varMonat%%varTag%\  
26.
 
27.
REM +++ Datei kopieren 
28.
copy %varKOM% c:\Batch\Archiv\%varUSER%\ARCH_%varJahr%%varMonat%%varTag%\  
29.
 
30.
goto :eof 
31.
  
32.
:End 
33.
Endlocal
Grüsse
Eric
Bitte warten ..
Mitglied: Biber
07.05.2007 um 18:46 Uhr
Moin Eric01,

Kann man sicherlich noch optimieren ;o)
Natürlich... aber das kommt irgendwann von allein.
Bei den ersten Geh-Versuchen mit einer (neuen) Programmier- oder auch Skriptsprache sind die ersten drei, wesentlich höheren Hürden,
  • erstmal das Ganze überhaupt zum Fliegen zu bringen,
  • zu verstehen, warum und wie es überhaupt funktioniert
  • es so wart- und pflegbar zu schreiben, dass Du es auch noch in einem Vierteljahr nachvollziehen kannst.

Und da hast Du Dich schon tapfer geschlagen, finde ich.

Ein paar handwerkliche Schnitzer (eben die typischen Anfänger-Fallen) möchte ich noch kurz ansprechen, weil die monatelang unbemerkt bleiben könnten...
- Achte darauf, wo das eigentliche Programm zu Ende ist.... wo nur noch "geCALLte Blöcke" folgen.
Dort muss ein "goto :eof" (oder bei eigener Endemarke ein "goto :ende" stehen,
sonst werden die Unterroutinen auch noch einmal (mehr) ausgeführt.
01.
.... 
02.
FOR /D %%i in (c:\Batch\Diktate\*.*) do (  
03.
   set varPfad=%%i 
04.
   call :loop) 
05.
<b> goto :eof</b> 
06.
~~~ Ende des <i>eigentlichen </i> Batches; der Rest sind Unterroutinen 
07.
:loop 
- Hier kannst du es etwas lesbarer mehrzeilig gestalten und beiläüfig einen Tippfehler beheben
(Streiche "%verMonat%", Setze "%varMonat%")
01.
...[JETZT] 
02.
if not exist c:\Batch\Archiv\%varUSER%    md c:\Batch\Archiv\%varUSER% 
03.
if not exist c:\Batch\Archiv\%varUSER%\ARCH_%varJahr%%verMonat%%varTag%\ md c:\Batch\Archiv\%varUSER%\ARCH_%varJahr%%varMonat%%varTag%\  
04.
.... 
05.
 
06.
[NEU, etas lesbarer und ausreichend ist nur das "längere" Verzeichnis anzulegen:] 
07.
if not exist c:\Batch\Archiv\%varUSER%\ARCH_%varJahr%%v<u>a</u>rMonat%%varTag% ( 
08.
            md c:\Batch\Archiv\%varUSER%\ARCH_%varJahr%%varMonat%%varTag%\  
09.
)
- die Endemarke ":End" und der darauf folgende Befehl "Endlocal" werden nie erreicht werden können...
...da an keiner Stelle ein "goto :End" steht. Siehe den ersten Hinweis.

Aber ich denke, wir können Deine Frage getrost auf "erledigt" setzen, oder?

Gruss
Biber
Bitte warten ..
Mitglied: Eric01
09.05.2007 um 16:44 Uhr
Hallo Biber,

danke für die Hinweise und die Hilfe.

Es "fliegt" auch.

Frage erledigt.

Gruss
Eric
Bitte warten ..
Ähnliche Inhalte
Batch & Shell

In einer Batch-Datei einen variablen Teil eines Dateinamens auslesen

gelöst Frage von dh0815Batch & Shell5 Kommentare

Hallo Leute, das ist mein erster Post hier und ich möchte mich vorab schon dafür entschuldigen, wenn ich etwas ...

Batch & Shell

Batch datei.txt teile auslesen

gelöst Frage von yellyBirdBatch & Shell2 Kommentare

Hallo zusammen, ich bin realtiv neu hier und hätte eine kleine Frage: ich möchte mit einem batchfile aus einer ...

Batch & Shell

Teile eines Dateinamens ändern mit Batch Datei

gelöst Frage von fffffuuuuuuuhhhhBatch & Shell4 Kommentare

Hallo, ich, stelle regelmäßig .mp3-Dateien her, die folgendermaßen von meinem Audioprogramm beschriftet wird: Interpret - Titel _xxxxxx000.mp3 die x stehen für eine ...

Batch & Shell

Batch: Dateiname abhängig vom Änderungsdatum auslesen

gelöst Frage von freaktastischBatch & Shell6 Kommentare

Servus zusammen, hab folgende Situation Oberordner: beinhaltet test.bat, Ordner1 und Ordner2 Ordner1, sowie Ordner2 beinhalten .docx Dateien. Mein Anliegen ...

Neue Wissensbeiträge
Windows 10

USB Maus und Tastatur versagen Dienst unter Windows 10

Erfahrungsbericht von hardykopff vor 1 TagWindows 105 Kommentare

Da steht man ziemlich dumm da, wenn der PC sich wegen fehlender USB Tastatur und Maus nicht bedienen lässt. ...

Administrator.de Feedback
Update der Seite: Alles zentriert
Information von Frank vor 1 TagAdministrator.de Feedback18 Kommentare

Hallo User, die größte Änderung von Release 5.8 ist das Zentrieren der Webseite (auf großen Bildschirmen) und ein "Welcome"-Teaser ...

Humor (lol)

WhatsApp-Nachrichten endlich auch per Bluetooth versendbar

Information von BassFishFox vor 2 TagenHumor (lol)4 Kommentare

Genau darauf habe ich gewartet! ;-) Der beliebte Messaging-Dienst WhatsApp erhält eine praktische neue Funktion: Ab dem nächsten Update ...

Google Android

Googles "Android Enterprise Recommended" für Unternehmen

Information von kgborn vor 3 TagenGoogle Android3 Kommentare

Hier eine Information, die für Administratoren und Verantwortliche in Unternehmen, die für die Beschaffung und das Rollout von Android-Geräten ...

Heiß diskutierte Inhalte
Windows Server
Standortvernetzung zu einem Strato VServer (Windows)
Frage von matzefratze81Windows Server10 Kommentare

Moin, ich komme aus einem Enterprise-Umfeld und habe den Fehler gemacht, dass ich mich auf ein kleines Unternehmen eingelassen ...

Grafikkarten & Monitore
4k EIZO Monitor, Fernseher und Splitter
Frage von LerxxeyGrafikkarten & Monitore9 Kommentare

Hallo Zusammen, vielleicht könnt ihr mir bei einem Problem helfen wo ich einfach nicht mehr weiterkomme Und zwar haben ...

Microsoft Office
Freitagsfrage? Excel und CSV - Import statt öffnen
gelöst Frage von KraemerMicrosoft Office7 Kommentare

Moin zusammen, entweder fallen mir heute nicht die richtigen Wörter für Google ein, oder es geht schlicht nicht. Gibt ...

Entwicklung
Batch - Überprüfung
gelöst Frage von apex.predator24Entwicklung6 Kommentare

Hallo Zusammen Gibt es eine Möglichkeit, einen Prozess im TaskManager über eine Batch-Datei zu überprüfen ob dieser läuft oder ...