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

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, 20031 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 ..
Neuester Wissensbeitrag
Ähnliche Inhalte
Batch & Shell
gelöst Per Batch Dateien in einen Ordner - ext. Festplatte übertragen (2)

Frage von tocksick zum Thema Batch & Shell ...

Batch & Shell
gelöst Batch Datei zum verschieben von Dateien aus Unterordnern ? (10)

Frage von Ghostrider1911 zum Thema Batch & Shell ...

Batch & Shell
Batch-Variable nach Stichworten aus TXT Datei durchsuchen (3)

Frage von Markus5579 zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
LAN, WAN, Wireless
FritzBox, zwei Server, verschiedene Netze (19)

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

Windows Userverwaltung
Ausgeschiedene Mitarbeiter im Unternehmen - was tun mit den AD Konten? (19)

Frage von patz223 zum Thema Windows Userverwaltung ...

Windows Netzwerk
Windows 10 RDP geht nicht (18)

Frage von Fiasko zum Thema Windows Netzwerk ...

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

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