我有一个包含图像的文件夹,我需要使用ImageMagick对其进行转换。如何在Powershell中为每个文件(作为参数)运行命令?
答案 0 :(得分:1)
Get-ChildItem
返回一个FileInfo对象的数组,您不应将它们视为仅包含路径和文件名的字符串。
而是使用这些对象FullName
和Name
Get-ChildItem -Path "C:\Pictres" -File | ForEach-Object {
# The automatic variable '$_' or '$PSItem' contains the current object in the PowerShell pipeline.
$originalImage = $_.FullName
$convertedImage = Join-Path -Path $_.DirectoryName -ChildPath ('test_{0}' -f $_.Name)
& 'C:\INSTALL\ImageMagick-7.0.8-Q16\magick.exe' "$originalImage" -negate "$convertedImage"
}
答案 1 :(得分:1)
为了提高效率(因为我可以通过使用数组v4
看到您在ForEach
上),因此可以使用-File
上的Get-ChildItem
开关(在v3
中引入),仅获取您需要的文件。此外,使用foreach
关键字比.ForEach()
或ForEach-Object
更具可读性和性能。
您可以使用调用运算符来运行外部可执行文件(&
):
$magick = 'C:\INSTALL\ImageMagick-7.0.8-Q16\magick.exe'
$path = 'C:\Pictres'
foreach ($file in Get-ChildItem -Path $path -File) {
& $magick "$($file.FullName)" -negate "$path\test_$($file.Name)"
}
答案 2 :(得分:-1)
使用Get-ChildItem
和ForEach
。 $PSItem
是自动定义的
(Get-ChildItem -Path "C:\Pictres").ForEach({
>> $BuildName = "C:\Pictres\$PSItem"
>> $BuildName2 = "C:\Pictres\test_$PSItem"
>> C:\INSTALL\ImageMagick-7.0.8-Q16\magick.exe "$BuildName" -negate "$BuildName2"
>> }
>> )