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

Batch Ordner mit Dateinamen erstellen und verschieben

Frage Entwicklung Batch & Shell

Mitglied: Tolgi

Tolgi (Level 1) - Jetzt verbinden

09.04.2010 um 09:34 Uhr, 14446 Aufrufe, 10 Kommentare

Brauche Hilfe fur eine Ordnerorganisation

Hallo, folgendes Problem habe ich mit Batchprogrammierung,

Ich habe eine Festplatte mit etwa 500 Avi Files und 500 jpg Files.

Dateiname.avi sowie Dateiname.jpg sind jeweils bis auf die Endung exakt identisch.

Nun brauche ich ein Skript und für jeden Avi File einen Ordner mit dem Namen "Dateiname" erstellt und die Dateiname.avi und Dateiname.jpg in diesen Ordner verschiebt.

Beispiel:
RedBull X-Fighters 2009 Mexico AC3.avi und
RedBull X-Fighters 2009 Mexico AC3.jpg sollen beide in den Ordner
RedBull X-Fighters 2009 Mexico AC3 verschoben werden (Ordner muss vorher erstellt werden).

Wäre schn wenn mir da jemand helfen knnte da sich meine Batch kenntnisse echt in grenzen halten.

Vielen Dank im Vorraus für eure Super Hilfe im Forum.
Mitglied: bastla
09.04.2010, aktualisiert 22.06.2013
Hallo Tolgi!

Dazu sollte eigentlich
for %i in (D:\Videos\*.avi) do @(md "%~dpi%~ni" && (move "%i" "%~dpi%~ni\" & move "%~dpni.jpg" "%~dpi%~ni\"))
direkt an der Eingabezeile genügen, wobei durch das jeweilige "echo" die Befehle zunächst nur angezeigt werden - wenn Du (alle 3) "echo" weg lässt, werden die Befehle auch ausgeführt.

Solltest Du einen Batch daraus machen wollen, einfach jedes vorkommende Prozentzeichen verdoppeln ...

Noch ein Hinweis: Wenn es (vermutlich) ohnehin nur die ".avi" und die ".jpg" zu einem bestimmten Namen gibt, oder, falls auch noch andere Dateitypen vorhanden wären, diese mit verschoben werden sollen, würde sich die Zeile auf
for %i in (D:\Videos\*.avi) do @(md "%~dpi%~ni" && move "%~dpni.*" "%~dpi%~ni\")
reduzieren.

Grüße
bastla
Bitte warten ..
Mitglied: Tolgi
09.04.2010 um 10:06 Uhr
Super, danke. Hat auf anhieb geklappt!
Damit hast du mir nen paar Stunden arbeit erspart. Danke Danke Danke
Bitte warten ..
Mitglied: 5t8d1e
09.04.2010 um 10:48 Uhr
Hallo, Tolgi
quick und dirty sieht sollte es so aussehen
01.
SET ziel=C:\temp\backup\ 
02.
SET quelle=c:\temp\Test_PS 
03.
 
04.
for /f "delims==" %a in ('dir /b "%quelle%"') do if not exist "%ziel%%~na" mkdir "%ziel%%~na"  &&   xcopy "%~na.*" "%ziel%%~na"
grüße
Torsten

edit: aus den xcopy nen move machen!
Bitte warten ..
Mitglied: bastla
09.04.2010, aktualisiert 15.08.2013
@5t8d1e

So richtig quick wird's vermutilch nicht werden, da bei Deinem Ansatz kopiert und nicht, wie gewünscht, verschoben wird - was sich bei 500 .avi-Files etwas hinziehen könnte ...

... hinsichtlich des Codes ginge es aber doch noch etwas quicker - "xcopy" erstellt sich den Zielordner nämlich selbst (wird aber vermutlich nicht allzuviel zu tun bekommen, da ein "dir /b" - ohne zusätzliches "/s", was hier aber eher nicht gefrag sein wird - keinen vollständigen Pfad liefert; daher müsstest Du den Pfad schon auch mit angeben - oder, was meist einfacher ist, vorweg per "pushd" in den Quell-Ordner wechseln).

Deine Zeile 4 könnte auf Basis dieser Überlegungen (wenn es beim Kopieren bleiben soll) etwa so aussehen:
for /f "delims=" %a in ('dir /b "%quelle%\*.avi"') do xcopy "%quelle%\%~na.*" "%ziel%%~na\"
Grüße
bastla

[Edit] "edit:" zu spät gesehen -das "Quell-Pfad-Problem" gäbe es aber auch bei "move" ... [/Edit]
Bitte warten ..
Mitglied: 5t8d1e
09.04.2010 um 11:39 Uhr
Hallo Bastla

Bei den Code wird natürlich ausgegangen man im Verzeichnis der Quelle ist. Deswegen quick und dirty. Wenn ich sowas sauber haben will würde ich nen PS-script irgenwie vorziehen


Grüße
Torsten

PS.:das xcopy auch Zielverzeichnise erstellt war mir noch net so bewußt . Wieder was gelernt

PPS.: nehmt ps1 verdammt cmd/bat!
Bitte warten ..
Mitglied: bastla
09.04.2010 um 12:01 Uhr
Hallo 5t8d1e!
Bei den Code wird natürlich ausgegangen man im Verzeichnis der Quelle ist.
Wenn ich noch etwas den "advocatus diaboli" geben darf: Dann wäre Deine Zeile 2 unnötig ...
Aber vielleicht magst Du ja die PS-Variante (zur Abrundung des Ganzen) noch hier reinstellen ...

Grüße
bastla
Bitte warten ..
Mitglied: 5t8d1e
09.04.2010 um 14:10 Uhr
Ahoi,

*hüstel* naja die zeile 2 sieht halt besser aus ;-=

hier das Script für PS und es ist kein Einzeiler, weil ich die nicht besonders mag
01.
$quelle = "C:\Temp\test_PS" 
02.
$ziel = "C:\Temp\Backup" 
03.
 
04.
#neues Array mit Dateiinfos aus Quelle 
05.
$quelldateien = @(Get-ChildItem $quelle) 
06.
 
07.
foreach ($datei in $quelldateien) { 
08.
 
09.
#Dateiname ohne Extension erstellen     
10.
    $basisname =  (split-path $Datei -leaf).split(".")[0] 
11.
 
12.
#Testen ob Zielpfad vorhanden ist, ansonsten erstellen 
13.
    IF ( Test-Path $ziel\$basisname ) 
14.
        {}  
15.
    else  
16.
    { New-Item $ziel\$basisname -type directory } 
17.
 
18.
#Testen ob Zieldatei bereits vorhanden ist, ansonsten erstellen 
19.
    IF ( Test-Path $ziel\$basisname\$datei ) 
20.
        { Write-Host "Datei $datei bereits îm Zielverzeichnis vorhanden, wird nicht verschoben" } 
21.
    else 
22.
        { Move-Item -Passthru $datei.Fullname -Destination "$ziel\$basisname\$Datei" } 
23.
}
ja ich erwarte Kritik!
Grüße Torsten
Bitte warten ..
Mitglied: Tobmoc
22.06.2013 um 00:11 Uhr
Ich muss hier ein GANZ KLARES DANKE sagen! Ich baue gerade Auktionen und muss über 4000 Dateien sortieren. Ohne euer "Kung-Fu" wäre das einige Wochen arbeit. Somit habe ich das Heute inkl. Photoshop umrechen, anpassen, zuschneiden usw usw in unter 3 Stunden geschaft! Batch rulez!!! DANKE MAN! Wenne ma in Hattingen bis, sach bescheid, das erste Pilz geht auf mich ;)
Bitte warten ..
Mitglied: ponkie
11.07.2013 um 23:45 Uhr
Hallo Thorsten,
dank Deines Scripts kann ich meine Dateien, die nach "Vorname Nachname" sortiert sind, in Ordner mit der Bezeichnung "Nachname Vorname" kopieren.
Die Zeile schaut dann so aus: $basisname = (split-path $Datei -leaf).split(" ")[1,0]
Absolut perfekt wäre es für mich, wenn ich ein Komma und ein Leerzeichen zwischen Nachname und Vorname einfügen könnte.
Ist mir bisher nicht gelungen. Vielleicht hast Du eine Idee.
Vielen Dank
Ponkie
Bitte warten ..
Mitglied: 5t8d1e
15.08.2013, aktualisiert um 20:34 Uhr
Hallo Ponkie,

Ich war lange nicht mehr online und habe erste jetzt dein Post gesehen.
Da ich gerade Zeit, Lust und Langeweile habe, habe ich das Skript ein bissl umgeschrieben
Du kannst das Skript so aufrufen und die Werte vom Parameter übernehmen oder in der Powershell mit neuen Werten aufrufen.
Bsp.: move-Files-custom.ps1 -Source c:\blub -Destination e:\bla -findstring foo -replacestring bar

01.
#move-Files-custom.ps1 
02.
Param ( 
03.
[String]$Source = "Z:\P0w3rsh3ll\Administrator.de\Ponkie\Source", 
04.
[String]$Destination = "Z:\P0w3rsh3ll\Administrator.de\Destination" , 
05.
[String]$findstring = ' ' , 
06.
[String]$replaceString = ', ' 
07.
08.
 
09.
#get-all Files 
10.
#Powershell V3 
11.
[array]$myFiles = Get-ChildItem -Path $Source -File 
12.
#Powershell V2 
13.
#[array]$myFiles = Get-ChildItem -Path $Source | where { $_.PSisContainer -ne $true } 
14.
foreach ( $file in $myFiles ) { 
15.
    [string]$Basename = $file.Basename 
16.
    [string]$newFileName = $file.Name -replace($findstring,$replaceString) 
17.
#Check for Destinationpath, if not exist create new Directory 
18.
    if ( ( Test-Path "$Destination\$Basename" ) -ne $true ) 
19.
        { New-Item -Path $Destination\$Basename -type directory } 
20.
#Move File with new Filename, if not exist on destinaton 
21.
    if ( Test-Path $Destination\$Basename\$newFileName ) 
22.
        { Write-Host "File $newFileName already exist, no further action" } 
23.
    else 
24.
        {  Move-Item -Passthru $file.Fullname -Destination "$Destination\$Basename\$newFileName" } 
25.
}
In der Hoffnung dass es dir weiter hilft, wie immer alles quick und dirty!

Der Torsten wars!
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (21)

Frage von Xaero1982 zum Thema Microsoft ...

Netzwerkmanagement
gelöst Anregungen, kleiner Betrieb, IT-Umgebung (18)

Frage von Unwichtig zum Thema Netzwerkmanagement ...

Windows Update
Treiberinstallation durch Windows Update läßt sich nicht verhindern (17)

Frage von liquidbase zum Thema Windows Update ...

Windows Tools
gelöst Aussendienst Datensynchronisierung (12)

Frage von lighningcrow zum Thema Windows Tools ...