Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

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

per Batch alle dateien eines Ordners jeweils in einen Ordner der den Namen der Datei erhält verschieben.

Frage Entwicklung Batch & Shell

Mitglied: paulkuhn

paulkuhn (Level 1) - Jetzt verbinden

26.01.2009, aktualisiert 15:33 Uhr, 23168 Aufrufe, 6 Kommentare

Hallo...

habe folgendes Batch-Anliegen:

Es sollen in einer Schleife alle Dateien (z.B. 123.pdf, 456.pdf, 456.log) eines Ordners z.B. (x:\in\) jeweils verschoben werden in einen Ordner mit Namen der Datei z.B. x:\123\123.pdf, x:\456\456.pdf und x:\456\456.log.
Dateien mit gleichem Dateinamen aber anderer Endung soll im gleichen Zielordner landen. Meist ist dieser Zielordner korrekt bezeichnet schon vorhanden, in wenigen Fällen nicht. Hier sollte der Ordner also vorher angelegt werden.
Der Dateiname ist in der Länge nicht fix. Die Batch-Datei wird nicht vom gleichen Ordner aufgerufen...

Für die meisten hier sicher trivial. Leider nicht für mich. Bin für alle Tipps dankbar...
Mitglied: ANGER77
26.01.2009 um 16:51 Uhr
ICh weiß leider nicht ob dir das weiterhelfen kann, aber Robocopy ist für solche Angelegenheiten immer sehr gut.

http://www.wintotal.de/Artikel/robocopy/robocopy.php

Gruß Rico
Bitte warten ..
Mitglied: paulkuhn
26.01.2009 um 17:35 Uhr
Hmm...
zunächst Danke für den Hinweis.
Ich hätte das Problem aber gern nur mit Batchscript gelöst, ohne Aufruf zusätzlicher Tools.

Allerdings strauchele ich schon in der for-schleife bei dem korrekten Auslesen des Parameters (Dateiname ohne Endung)
Bitte warten ..
Mitglied: Biber
26.01.2009 um 18:53 Uhr
Moin paulkuhn,

willkommen im Forum.
Im Prinzip brauchst Du nur ein bis zwei Zeilen vom CMD-Prompt für Dein Vorhaben.
Eine zeile, um das (eventuell) noch nicht vorhandene verzeichnis anzulegen und eine Anweisung, um die Dateien in dieses Verzeichnis zu MOVEn.

Demo am CMD-Prompt [einzugebene Zeilen beginnen mit ">"]
01.
> for %i in (d:\temp1\*.pdf) do @echo if not exist "%~dpi%~ni" md "%~dpi%~ni" 
02.
> for %i in (d:\temp1\*.pdf) do @echo move "%i" "%~dpi%~ni\*.*"
Bei meiner vorhandenen Datei d:\temp1\sy6help.pdf würde als ECHO herauskommen:
01.
if not exist "d:\temp1\sy6help" md "d:\temp1\sy6help" 
02.
move "d:\temp1\sy6help.pdf" "d:\temp1\sy6help\*.*"
In einem Batch auf ALLE Dateien angewandt (nicht nur auf *.pdf) sähe das so aus:
01.
::------snipp MoveIntoSubdirs.cmd 
02.
@FOR %%i IN (d:\EinStartVerzeichnis\*.*) do @( 
03.
          IF NOT EXIST "%%~dpi%%~ni" MD "%%~dpi%%~ni" 
04.
           MOVE "%%i" "%%~dpi%%~ni\" 
05.
)
[Edit] ungetestete Skizze - aber erkennbar (s.u.) [/Edit]

Dieses ganze kryptische %%~pdnxi-Geraffel ist nur in den ersten zwei Leseversuchen unverständlich,
mit der Hilfe zu FOR/? im unteren Drittel hast Du den Code schnell geknackt.

Grüße
Biber
Bitte warten ..
Mitglied: paulkuhn
26.01.2009 um 20:01 Uhr
Sauber...

Funktioniert nach einigen kleinen Änderungen sofort.
Es musste noch ein Leerzeichen zwischen IN und der Klammer und der Move-Befehl muss ohne *.* am Ende abgesetzt werden.

Dank dir sehr...

Aber:
was muss geändert werden, damit die Erstellung der Ordner und das Verschieben nicht in Unterordnern des Hauptordners stattfindet, sondern eine Ebene höher.
Also:
Hauptordner ist c:\test\out, darin befinden sich die Dateien, z.B. 157.pdf und 158.pdf
Die neuen Ordner sollen in c:\test\ erstellt werden und entsprechend die Datein von c:\test\out in die neuen Ordner auf c:\test\157\ und c:\test\158\ verschoben werden.

Gruß Paule
Bitte warten ..
Mitglied: Biber
26.01.2009 um 21:58 Uhr
Moin paulkuhn,

ausgerechnet bei dem letzten Kommentar habe ich NICHT druntergeschrieben "[ungetestete Skizze]"...*g

Ich korrigier es gleich oben.

Zu Deiner Frage: Wenn Du ein "festes" neues Root-Zeilverzeichnis hast:
--> ganz klar, dann schreib es fest rein in die (ohnehin nur eine) Zeile.
Dann wird im ersten Wurf daraus:
01.
::------snipp MoveIntoSubdirsV2.cmd 
02.
@FOR %%i IN(d:\EinStartVerzeichnis\*.*) do @( 
03.
          IF NOT EXIST "C:\test%%~ni" MD "c:\test%%~dpi%%~ni" 
04.
           MOVE "%%i" "c:\test%%~ni\" 
05.
)
...und wenn es bisschen wartbarer werden soll:
01.
::------snipp MoveIntoSubdirsV3.cmd 
02.
@echo off & setlocal 
03.
Set "QuellRoot=d:\EinStartVerzeichnis" 
04.
Set "ZielRoot=D:\test" 
05.
@FOR %%i IN ("%QuellRoot%\*.*") do @( 
06.
          IF NOT EXIST "%ZielRoot%\%%~ni" MD "%zielRoot%\%%~dpi%%~ni" 
07.
           MOVE "%%i" "%ZielRoot%\%%~ni\" 
08.
)
[ungetestete Skizze]

Grüße
Biber
Bitte warten ..
Mitglied: paulkuhn
27.01.2009 um 10:06 Uhr
Nochmal einen herzlichen Dank!!!

Abgesehen von den überaus kompetenten Antworten ist besonders Prima,
daß sogar Anleitungen zum besseren Verständniss des Codes gegeben werden (in den einleitenden Blöcken, mit Hinweis auf die "Debug-Möglichkeit" mit @echo).

Das hat mir sehr geholfen, so das ich tatsächlich spät am Abend noch selbstständig auf eine ähnliche Lösung gekommen bin.
(Allerdings jeweils festverdrahtet, ohne Nutzung von Variablen für die Verzeichnisse) Dein neuer Code ist natürlich viel besser. Evtl. werde ich das noch so erweitern, das diese Source und Target-Variablen aus ner externen Datei eingelesen werden(Diese aus DB generiert) So das alles ohne weiteres editieren flutscht. Dazu gibt es hier ja reichlich Anleitungen und Hilfestellung. Toll, wie ein paar wenige Zeilen ein Problem lösen können....

Top!!!

Gruß Paule
Bitte warten ..
Ähnliche Inhalte
Batch & Shell
gelöst Batch : alle Dateien eines Ordners bearbeiten (1)

Frage von deguonkel zum Thema Batch & Shell ...

Batch & Shell
gelöst Ordner und Datei Name gleich (BATCH) (12)

Frage von clragon zum Thema Batch & Shell ...

Neue Wissensbeiträge
Multimedia

Raspberry Pi als Digital-Signage-Computer

(1)

Information von BassFishFox zum Thema Multimedia ...

Windows Update

Novemberpatches und Nadeldrucker bereiten Kopfschmerzen

(16)

Tipp von MettGurke zum Thema Windows Update ...

Windows 10

Abhilfe für Abstürze von CDPUsersvc auf Win10 1607 und 2016 1607

(7)

Tipp von DerWoWusste zum Thema Windows 10 ...

Heiß diskutierte Inhalte
Router & Routing
Freigabe aus anderem Netz nicht erreichbar (33)

Frage von McLion zum Thema Router & Routing ...

Visual Studio
Vb.net-Tool zum Erzeugen einer Outlook-E-Mail (24)

Frage von ahstax zum Thema Visual Studio ...

Batch & Shell
Batch Programm verhalten bei shoutdown -p (19)

Frage von Michael-ITler zum Thema Batch & Shell ...

Windows Netzwerk
Netzwerk Neustrukturierung (15)

Frage von IT-Dreamer zum Thema Windows Netzwerk ...