Havnegata Skrevet 5. juli 2015 Del Skrevet 5. juli 2015 (endret) Jeg har ingen erfaring med scripts, men har funnet et som jeg tror vil hjelpe meg. Utgangspunkt er at jeg flytter videofiler fra ulike mobiler og kameraer, som så dumpes i en mappe på pc'n. Det jeg ønsker scriptet skal gjøre er å organisere disse mp4 filene i respektive mapper basert på årstall og måned utfra timestamp i filnavnet. Filnavnet er slik: 2015-04-03_113801.mp4 Scriptet er slik: @echo off set "target=C:\Users\arne\Desktop\sortert" pushd "C:\Users\arne\Desktop\usortert" for /f "tokens=1,2 delims=-_" %%G in ('dir /b /a-d ') do ( echo processing "%%G %%H" md "%target%\%%G\%%H" move "%%G" "%target%\%%G\%%H" ) popd Det som skjer er at mappene blir slik jeg ønsker dem, men ingen filer blir flyttet. Feilmeldingen er at "Systemet finner ikke angitt fil" Er det noen som ser hva som er feil? Endret 5. juli 2015 av Havnegata Lenke til kommentar
geir__hk Skrevet 5. juli 2015 Del Skrevet 5. juli 2015 Har ikke holdt særlig på med windows bat filer siden win9x tiden, så det er godt mulig regler er snudd på hodet siden den tid. Derfor blir det litt gjetning: Jeg tror at echo, md og move bør stå på hver sin linje for at det skal fungere. Lenke til kommentar
ahw_ Skrevet 6. juli 2015 Del Skrevet 6. juli 2015 Siden jeg trenger mer erfaring med Powershell uansett, har jeg laget et nytt og bedre skript til deg med Powershell. Batch er greit til enkle ting, men blir lett krevende og upålitelig. Hvordan du bruker skriptet jeg laget: Start powershell eller cmd. Kjør skriptet (forhåndsvisning): Med Powershell: .\OrganizeFiles.ps1 .\usortert .\sortert -dryRun Med cmd: powershell -ExecutionPolicy Bypass -File .\OrganizeFiles.ps1 .\usortert .\sortert -dryRun Hvis du er fornøyd, kjør skriptet igjen uten «-dryRun». Eksempel på filnavn: OrganizeFiles.ps1 param( [Parameter(Mandatory = $true)] [string] $sourceDir, [Parameter(Mandatory = $true)] [string] $targetDir, [switch] $dryRun = $false ) Set-StrictMode -Version Latest $ErrorActionPreference = "Stop" $fakePathsForDryRun = New-Object -TypeName 'System.Collections.Generic.HashSet[string]' function getUniqueFilePath($path) { if (-not (Test-Path -Path $path)) { if (-not $dryRun -or -not $fakePathsForDryRun.Contains($path)) { return $path } } $dir = Split-Path -Path $path $fileNameWithoutExt = [IO.Path]::GetFileNameWithoutExtension($path) $ext = [IO.Path]::GetExtension($path) $newFileName = $fileNameWithoutExt + "-" + [guid]::NewGuid() + $ext $newPath = Join-Path -Path $dir -ChildPath $newFileName return $newPath } function tryMoveFile($source, $desiredDestination) { $newDestination = getUniqueFilePath $desiredDestination if ($desiredDestination -ne $newDestination) { Write-Warning ('File "{0}" exists; renaming to "{1}".' -f $desiredDestination, $newDestination) } Write-Output ('Moving file: {0} -> {1}' -f $source, $newDestination) if ($dryRun) { $fakePathsForDryRun.Add($newDestination) | Out-Null return } Move-Item -Path $source -Destination $newDestination } if ($dryRun) { Write-Warning "Performing a dry run; no changes will be made." } Resolve-Path -Path $sourceDir | Out-Null if (Test-Path -Path $targetDir) { if (-not (Test-Path -Path $targetDir -PathType Container)) { throw "Path exists but it is not a directory: $targetDir" } } $sourceFiles = Get-ChildItem -Path $sourceDir -Recurse -File foreach ($sourceFile in $sourceFiles) { $sourceFilePath = Resolve-Path -Path $sourceFile.FullName $sourceFileName = Split-Path -Path $sourceFilePath -Leaf if (-not ($sourceFileName -match '^(\d{4})-(\d{2})-\d{2}_\d+')) { Write-Warning "Skipping file: $sourceFilePath" continue } $year = $Matches[1] $month = $Matches[2] $newParentDir = Join-Path -Path $targetDir -ChildPath "$year/$month" if (-not (Test-Path -Path $newParentDir)) { if (-not $dryRun) { New-Item -Path $newParentDir -ItemType Directory | Out-Null } } if (-not $dryRun) { $newParentDir = Resolve-Path -Path $newParentDir } $desiredNewFilePath = Join-Path -Path $newParentDir -ChildPath $sourceFileName tryMoveFile $sourceFilePath $desiredNewFilePath } Eksempel på output (forhåndsvisning): PS C:\Users\Steffen\Desktop> .\OrganizeFiles.ps1 .\usortert .\sortert -dryRun WARNING: Performing a dry run; no changes will be made. Moving file: C:\Users\Steffen\Desktop\usortert\2015-02-03_113801.mp4 -> .\sortert\2015\02\2015-02-03_113801.mp4 Moving file: C:\Users\Steffen\Desktop\usortert\2015-04-01_113801.mp4 -> .\sortert\2015\04\2015-04-01_113801.mp4 Moving file: C:\Users\Steffen\Desktop\usortert\2017-04-04_113801.mp4 -> .\sortert\2017\04\2017-04-04_113801.mp4 Moving file: C:\Users\Steffen\Desktop\usortert\2017-07-07_113801.mp4 -> .\sortert\2017\07\2017-07-07_113801.mp4 WARNING: File ".\sortert\2015\02\2015-02-03_113801.mp4" exists; renaming to ".\sortert\2015\02\2015-02-03_113801-87581006-b874-4800-9239-cb326aeb6c89.mp4". Moving file: C:\Users\Steffen\Desktop\usortert\New folder\2015-02-03_113801.mp4 -> .\sortert\2015\02\2015-02-03_113801-87581006-b874-4800-9239-cb326aeb6c89.mp4 WARNING: File ".\sortert\2015\04\2015-04-01_113801.mp4" exists; renaming to ".\sortert\2015\04\2015-04-01_113801-bedcc505-f341-4a6b-ad32-8ffb6cfe9037.mp4". Moving file: C:\Users\Steffen\Desktop\usortert\New folder\2015-04-01_113801.mp4 -> .\sortert\2015\04\2015-04-01_113801-bedcc505-f341-4a6b-ad32-8ffb6cfe9037.mp4 WARNING: File ".\sortert\2017\04\2017-04-04_113801.mp4" exists; renaming to ".\sortert\2017\04\2017-04-04_113801-fd443e18-431d-4640-9d1e-ae96e533fb57.mp4". Moving file: C:\Users\Steffen\Desktop\usortert\New folder\2017-04-04_113801.mp4 -> .\sortert\2017\04\2017-04-04_113801-fd443e18-431d-4640-9d1e-ae96e533fb57.mp4 WARNING: File ".\sortert\2017\07\2017-07-07_113801.mp4" exists; renaming to ".\sortert\2017\07\2017-07-07_113801-5d69697e-f199-406b-a229-1326f974bcef.mp4". Moving file: C:\Users\Steffen\Desktop\usortert\New folder\2017-07-07_113801.mp4 -> .\sortert\2017\07\2017-07-07_113801-5d69697e-f199-406b-a229-1326f974bcef.mp4 WARNING: Skipping file: C:\Users\Steffen\Desktop\usortert\New folder\New folder.rar Eksempel på output (gjør endringer): PS C:\Users\Steffen\Desktop> .\OrganizeFiles.ps1 .\usortert .\sortert Moving file: C:\Users\Steffen\Desktop\usortert\2015-02-03_113801.mp4 -> C:\Users\Steffen\Desktop\sortert\2015\02\2015-02-03_113801.mp4 Moving file: C:\Users\Steffen\Desktop\usortert\2015-04-01_113801.mp4 -> C:\Users\Steffen\Desktop\sortert\2015\04\2015-04-01_113801.mp4 Moving file: C:\Users\Steffen\Desktop\usortert\2017-04-04_113801.mp4 -> C:\Users\Steffen\Desktop\sortert\2017\04\2017-04-04_113801.mp4 Moving file: C:\Users\Steffen\Desktop\usortert\2017-07-07_113801.mp4 -> C:\Users\Steffen\Desktop\sortert\2017\07\2017-07-07_113801.mp4 WARNING: File "C:\Users\Steffen\Desktop\sortert\2015\02\2015-02-03_113801.mp4" exists; renaming to "C:\Users\Steffen\Desktop\sortert\2015\02\2015-02-03_113801-aa1c59b7-9e03-45ae-9b90-439bec133fa7.mp4". Moving file: C:\Users\Steffen\Desktop\usortert\New folder\2015-02-03_113801.mp4 -> C:\Users\Steffen\Desktop\sortert\2015\02\2015-02-03_113801-aa1c59b7-9e03-45ae-9b90-439bec133fa7.mp4 WARNING: File "C:\Users\Steffen\Desktop\sortert\2015\04\2015-04-01_113801.mp4" exists; renaming to "C:\Users\Steffen\Desktop\sortert\2015\04\2015-04-01_113801-cffbd170-6cf7-436f-9ec8-bae7a886fb72.mp4". Moving file: C:\Users\Steffen\Desktop\usortert\New folder\2015-04-01_113801.mp4 -> C:\Users\Steffen\Desktop\sortert\2015\04\2015-04-01_113801-cffbd170-6cf7-436f-9ec8-bae7a886fb72.mp4 WARNING: File "C:\Users\Steffen\Desktop\sortert\2017\04\2017-04-04_113801.mp4" exists; renaming to "C:\Users\Steffen\Desktop\sortert\2017\04\2017-04-04_113801-9d5d4e8b-39e3-4ece-850e-4ca2bd12fa5e.mp4". Moving file: C:\Users\Steffen\Desktop\usortert\New folder\2017-04-04_113801.mp4 -> C:\Users\Steffen\Desktop\sortert\2017\04\2017-04-04_113801-9d5d4e8b-39e3-4ece-850e-4ca2bd12fa5e.mp4 WARNING: File "C:\Users\Steffen\Desktop\sortert\2017\07\2017-07-07_113801.mp4" exists; renaming to "C:\Users\Steffen\Desktop\sortert\2017\07\2017-07-07_113801-b09067c2-8a62-4f73-9d01-6bc5bded50b9.mp4". Moving file: C:\Users\Steffen\Desktop\usortert\New folder\2017-07-07_113801.mp4 -> C:\Users\Steffen\Desktop\sortert\2017\07\2017-07-07_113801-b09067c2-8a62-4f73-9d01-6bc5bded50b9.mp4 WARNING: Skipping file: C:\Users\Steffen\Desktop\usortert\New folder\New folder.rar Lenke til kommentar
Havnegata Skrevet 6. juli 2015 Forfatter Del Skrevet 6. juli 2015 Takk for input! Skal kaste meg over den når jeg kommer hjem. Lenke til kommentar
Havnegata Skrevet 6. juli 2015 Forfatter Del Skrevet 6. juli 2015 Har ikke holdt særlig på med windows bat filer siden win9x tiden, så det er godt mulig regler er snudd på hodet siden den tid. Derfor blir det litt gjetning: Jeg tror at echo, md og move bør stå på hver sin linje for at det skal fungere. Takk for input! Skal teste det når jeg kommer hjem Lenke til kommentar
Havnegata Skrevet 6. juli 2015 Forfatter Del Skrevet 6. juli 2015 (endret) Hvor skal jeg definere source directory og target directory? Endret 6. juli 2015 av Havnegata Lenke til kommentar
ahw_ Skrevet 6. juli 2015 Del Skrevet 6. juli 2015 (endret) Hvor skal jeg definere source directory og target directory? Du passerer bare disse inn til skriptet (se mitt eksempel). Alternative varianter: .\OrganizeFiles.ps1 -sourceDir .\usortert -targetDir .\sortert -dryRun C:\OrganizeFiles.ps1 -sourceDir C:\usortert -targetDir C:\sortert -dryRun C:\OrganizeFiles.ps1 -sourceDir "C:\en mappe\usortert" -targetDir "C:\en annen mappe\sortert" -dryRun Endret 6. juli 2015 av ahw_ Lenke til kommentar
Havnegata Skrevet 6. juli 2015 Forfatter Del Skrevet 6. juli 2015 Hvor skal jeg definere source directory og target directory? Du passerer bare disse inn til skriptet (se mitt eksempel). Alternative varianter: .\OrganizeFiles.ps1 -sourceDir .\usortert -targetDir .\sortert -dryRun C:\OrganizeFiles.ps1 -sourceDir C:\usortert -targetDir C:\sortert -dryRun C:\OrganizeFiles.ps1 -sourceDir "C:\en mappe\usortert" -targetDir "C:\en annen mappe\sortert" -dryRun Takk for respons! Denne feilmeldingen får jeg: PS C:\windows\system32> cd c:\users\havnegata\desktop PS C:\users\havnegata\desktop> .\orgvideo.ps1 .\usortert .\sortert -dryRun WARNING: Performing a dry run; no changes will be made. Get-ChildItem : A parameter cannot be found that matches parameter name 'File'. At C:\users\havnegata\desktop\orgvideo.ps1:63 char:61 + $sourceFiles = Get-ChildItem -Path $sourceDir -Recurse -File <<<< + CategoryInfo : InvalidArgument: ( [Get-ChildItem], ParentContainsErrorRecordException + FullyQualifiedErrorId : NamedParameterNotFound,Microsoft.PowerShell.Commands.GetChildItemCommand PS C:\users\havnegata\desktop> Lenke til kommentar
ahw_ Skrevet 6. juli 2015 Del Skrevet 6. juli 2015 (endret) Hvilken versjon av Windows har du? Eller mer korrekt er er å spørre hvilken versjon av Powershell du har. Inni Powershell-shell'et, kan du skrive inn følgende: $PSVersionTable Så skal du få noe som ligner dette: PS C:\Users\Steffen> $PSVersionTable Name Value ---- ----- PSVersion 4.0 WSManStackVersion 3.0 SerializationVersion 1.1.0.1 CLRVersion 4.0.30319.34209 BuildVersion 6.3.9600.17400 PSCompatibleVersions {1.0, 2.0, 3.0, 4.0} PSRemotingProtocolVersion 2.2 Jeg har versjon 4.0, og skriptet fungerer sannsynligvis ikke med en versjon eldre enn 3.0. Endret 6. juli 2015 av ahw_ Lenke til kommentar
Havnegata Skrevet 6. juli 2015 Forfatter Del Skrevet 6. juli 2015 Ser ut som jeg har versjon 2.0 Da får jeg prøve å oppgradere Takk for hjelpen så langt! Lenke til kommentar
Havnegata Skrevet 6. juli 2015 Forfatter Del Skrevet 6. juli 2015 Der satt den! Tusen takk for all hjelp! Lenke til kommentar
Havnegata Skrevet 20. juli 2015 Forfatter Del Skrevet 20. juli 2015 Må ta opp igjen denne tråden. Får denne feilmeldingen: PS C:\users\havnegata\desktop> .\orgvideo.ps1 .\usortert .\sortert WARNING: Skipping file: C:\users\havnegata\desktop\usortert\20150715_093950.mp4 PS C:\users\havnegata\desktop> Hvorfor blir fila ekskludert? Lenke til kommentar
ahw_ Skrevet 20. juli 2015 Del Skrevet 20. juli 2015 (endret) Må ta opp igjen denne tråden. Får denne feilmeldingen: PS C:\users\havnegata\desktop> .\orgvideo.ps1 .\usortert .\sortert WARNING: Skipping file: C:\users\havnegata\desktop\usortert\20150715_093950.mp4 PS C:\users\havnegata\desktop> Hvorfor blir fila ekskludert? Hei igjen! Fila ekskluderes fordi datoen ikke matcher formatet «xxxx-xx-xx» (altså med «-»). Endret 20. juli 2015 av ahw_ Lenke til kommentar
Havnegata Skrevet 20. juli 2015 Forfatter Del Skrevet 20. juli 2015 Supert! Så den linja i scriptet, men forstod ikke så mye. Nå er jeg enda litt klokere. Takk for superrask respons! 1 Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå