Batch Ordner mit Dateinamen erstellen und verschieben
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.
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.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 140211
Url: https://administrator.de/contentid/140211
Ausgedruckt am: 05.11.2024 um 06:11 Uhr
10 Kommentare
Neuester Kommentar
Hallo Tolgi!
Dazu sollte eigentlich
direkt an der Eingabezeile genügen, wobei durch das jeweilige "
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
reduzieren.
Grüße
bastla
Dazu sollte eigentlich
for %i in (D:\Videos\*.avi) do @(md "%~dpi%~ni" && (move "%i" "%~dpi%~ni\" & move "%~dpni.jpg" "%~dpi%~ni\"))
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\")
Grüße
bastla
@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 - "
Deine Zeile 4 könnte auf Basis dieser Überlegungen (wenn es beim Kopieren bleiben soll) etwa so aussehen:
Grüße
bastla
[Edit] "edit:" zu spät gesehen -das "Quell-Pfad-Problem" gäbe es aber auch bei "
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\"
bastla
[Edit] "edit:" zu spät gesehen -das "Quell-Pfad-Problem" gäbe es aber auch bei "
move
" ... [/Edit]
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!
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!
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
ja ich erwarte Kritik!
Grüße Torsten
*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
$quelle = "C:\Temp\test_PS"
$ziel = "C:\Temp\Backup"
#neues Array mit Dateiinfos aus Quelle
$quelldateien = @(Get-ChildItem $quelle)
foreach ($datei in $quelldateien) {
#Dateiname ohne Extension erstellen
$basisname = (split-path $Datei -leaf).split(".")
#Testen ob Zielpfad vorhanden ist, ansonsten erstellen
IF ( Test-Path $ziel\$basisname )
{}
else
{ New-Item $ziel\$basisname -type directory }
#Testen ob Zieldatei bereits vorhanden ist, ansonsten erstellen
IF ( Test-Path $ziel\$basisname\$datei )
{ Write-Host "Datei $datei bereits îm Zielverzeichnis vorhanden, wird nicht verschoben" }
else
{ Move-Item -Passthru $datei.Fullname -Destination "$ziel\$basisname\$Datei" }
}
ja ich erwarte Kritik!
Grüße Torsten
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 ;)
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
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
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
In der Hoffnung dass es dir weiter hilft, wie immer alles quick und dirty!
Der Torsten wars!
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
#move-Files-custom.ps1
Param (
[String]$Source = "Z:\P0w3rsh3ll\Administrator.de\Ponkie\Source",
[String]$Destination = "Z:\P0w3rsh3ll\Administrator.de\Destination" ,
[String]$findstring = ' ' ,
[String]$replaceString = ', '
)
#get-all Files
#Powershell V3
[array]$myFiles = Get-ChildItem -Path $Source -File
#Powershell V2
#[array]$myFiles = Get-ChildItem -Path $Source | where { $_.PSisContainer -ne $true }
foreach ( $file in $myFiles ) {
[string]$Basename = $file.Basename
[string]$newFileName = $file.Name -replace($findstring,$replaceString)
#Check for Destinationpath, if not exist create new Directory
if ( ( Test-Path "$Destination\$Basename" ) -ne $true )
{ New-Item -Path $Destination\$Basename -type directory }
#Move File with new Filename, if not exist on destinaton
if ( Test-Path $Destination\$Basename\$newFileName )
{ Write-Host "File $newFileName already exist, no further action" }
else
{ Move-Item -Passthru $file.Fullname -Destination "$Destination\$Basename\$newFileName" }
}
In der Hoffnung dass es dir weiter hilft, wie immer alles quick und dirty!
Der Torsten wars!