Entfernen Sie das Leerzeichen zwischen Verzeichnis und Dateiname und setzen Sie einen umgekehrten Schrägstrich
$newFilename = $image.DirectoryName + "\" + $image.BaseName + $fileNameSuffix + $image.Extension
Das folgende Powershell-Skript soll alle angegebenen Bilder innerhalb des angegebenen Stammordners verarbeiten. Einige der umbenannten Ausgabebilder werden außerhalb des Stammordners generiert. Haben irgendwelche PowerShell-Gurus eine Idee warum? Wie kann ich Dateien nur im Stammordner ausgeben und nicht AUSSERHALB des Stammordners?
# This script requires ImageMagick # Configuration # Enter the full path of the folder that contains the images $Rootfolder = "C:\temp\rktest" $Recursive=$true # Change these if necessary $fileExtensions = "*.png" $fileNameSuffix = "_resized" # the text to be appended to the output filename to indicate that it has been modified $files = $null; $fileCount = 0 # Check if the root folder is a valid folder. If not, try again. if ((Test-Path $RootFolder -PathType 'Container') -eq $false) { Write-Host "'$RootFolder' doesn't seem to be a valid folder. Please try again" -ForegroundColor Red break } # Get all image files in the folder if ($Recursive) { $files = gci $RootFolder -Filter $fileExtensions -File -Recurse } # If there are no image files found, write out a message and quit if ($files.Count -lt 1) { Write-Host "No image files with extension '$fileExtensions' were found in the folder '$RootFolder'" -ForegroundColor Red break } # Loop through each of the files and process it foreach ($image in $files) { $newFilename = $image.DirectoryName + " " + $image.BaseName + $fileNameSuffix + $image.Extension $imageFullname = $image.FullName write-host "Processing image: $imageFullname" -ForegroundColor Green #This line contains the ImageMagick commands & convert.exe $image.FullName -resize 50% $newFilename $fileCount++ } Write-Host "$fileCount images processed" -ForegroundColor Yellow
Entfernen Sie das Leerzeichen zwischen Verzeichnis und Dateiname und setzen Sie einen umgekehrten Schrägstrich
$newFilename = $image.DirectoryName + "\" + $image.BaseName + $fileNameSuffix + $image.Extension
Wenn ich es richtig verstanden habe, sollten die verkleinerten Bilder eingefügt werden $RootFolder
, die Namen der Unterordner sollten jedoch als Teil des Dateinamens beibehalten werden, Leerzeichen getrennt.
Das folgende Skript führt zu diesem Beispielbaum:
> tree /F C:. └───temp └───rktest │ Image.png │ Image_resized.png │ SubDirL1 Image_resized.png │ SubDirL1 SubDirL2 Image_resized.png │ └───SubDirL1 │ Image.png │ └───SubDirL2 Image.png
Es erstellt eine berechnete Eigenschaft RelPAth
mit einer Auswahl und fügt sie der $ -Dateisammlung hinzu.
Dazu wird zuerst der RootFolder aus FullName entfernt und verbleibende Pfadtrennzeichen \
durch Leerzeichen ersetzt.
Beim Erstellen des neuen Dateinamens wird die Erweiterung durch das Suffix + Erweiterung ersetzt.
## Q:\Test\2018\06\02\SU_1327985.ps1 # This script requires ImageMagick # Configuration # Enter the full path of the folder that contains the images $Rootfolder = "C:\temp\rktest" $Recursive=$true # Change these if necessary $fileExtensions = "*.png" $fileNameSuffix = "_resized" # the text to be appended to the output filename to indicate that it has been modified $files = $null; $fileCount = 0 # Check if the root folder is a valid folder. If not, try again. if ((Test-Path $RootFolder -PathType 'Container') -eq $false) { Write-Host "'$RootFolder' doesn't seem to be a valid folder. Please try again" -ForegroundColor Red break } # Get all image files in the folder if ($Recursive) { $files = gci $RootFolder -Filter $fileExtensions -File -Recurse | select *,@} } # If there are no image files found, write out a message and quit if ($files.Count -lt 1) { Write-Host "No image files with extension '$fileExtensions' were found in the folder '$RootFolder'" -ForegroundColor Red break } # Loop through each of the files and process it foreach ($image in $files) { $newFilename = Join-Path $RootFolder ($image.RelPath.Replace($image.Extension,($fileNameSuffix+$image.Extension))) write-host "Processing image: $($image.Fullname)" -ForegroundColor Green #This line contains the ImageMagick commands & magick convert $image.FullName -resize 50% $newFilename $fileCount++ } Write-Host "$fileCount images processed" -ForegroundColor Yellow
Convert.exe ersetzt magick convert
wegen meiner ImageMagick-Version.