使用 Where {(...)} 后如何在 Powershell 中执行两个命令
How to execute two commands in Powershell after using Where {(...)}
在使用 Where 条件过滤文件后,如何 运行 同时使用 'rename' 命令和 'hidden' 命令。每个命令 运行 放置在第一位时它自己很好,但第二个被忽略。
Get-ChildItem -Recurse -Force | Where {(
$_.Extension -ne ".mp3" -and
$_.Extension -ne ".wmv" )} |
Set-ItemProperty -Name Attributes -Value "Hidden" -WhatIf |
Rename-Item -NewName {$_.Name -replace $_.Extension, -join($_.Extension, ".notmusic")} -
WhatIf
Get-ChildItem -Recurse -Force | Where {( $_.Extension -ne ".mp3" -and $_.Extension -ne ".wmv" )} | ForEach-Object {
Set-ItemProperty -Name Attributes -Value "Hidden" -Path $_.FullName -WhatIf
Rename-Item -Path $_.FullName -NewName "$($_.Name).notmusic" -WhatIf
}
我加在Set-ItemProperty-Path
Set-ItemProperty -Name Attributes -Value "Hidden" -Path $_.FullName -WhatIf
我改变了Rename-Item-Path
和-NewName
Rename-Item -Path $_.FullName -NewName "$($_.Name).notmusic"
For-Each:
Get-ChildItem -Recurse -Force | Where {( $_.Extension -ne ".mp3" -and $_.Extension -ne ".wmv" )} | ForEach-Object {
$_ | Set-ItemProperty -Name Attributes -Value "Hidden" -WhatIf
$_ | Rename-Item -NewName { $_.Name -replace $_.Extension, -join($_.Extension, ".notmusic")} -WhatIf
}
我看到您目录中的前几节 grab 文件不是 mp3 或 wmv 文件。
Get-ChildItem -Recurse -Force | Where {($_.Extension -ne ".mp3" -and $_.Extension -ne ".wmv")}
那部分不错。但是由于您对每个文件执行了两项操作,因此您应该以
的形式通过管道传输到 ForEach-Object
... | ForEach-Object {
# do something
# do something else
}
并且由于您没有直接通过管道传输到 Set-ItemProperty cmdlet,因此您需要将文件名的路径传递给它:
Set-ItemProperty -Path $_.FullName -Name Attributes -Value "Hidden"
然后我们进入您的重命名命令。看起来您希望名称为 filename.notmusic。同样,我们需要将文件路径传递给 cmdlet。另请注意如何使用子表达式 clean/nice 定义新名称的方法
Rename-Item -Path $_.FullName -NewName "$($_.BaseName).notmusic"
好的,所以把它们放在一起,我们有:
Get-ChildItem -Recurse -Force | Where-Object {($_.Extension -ne ".mp3" -and $_.Extension -ne ".wmv")} | ForEach-Object {
Set-ItemProperty -Path $_.FullName -Name Attributes -Value "Hidden" -WhatIf
Rename-Item -Path $_.FullName -NewName "$($_.BaseName).notmusic" -WhatIf
}
在使用 Where 条件过滤文件后,如何 运行 同时使用 'rename' 命令和 'hidden' 命令。每个命令 运行 放置在第一位时它自己很好,但第二个被忽略。
Get-ChildItem -Recurse -Force | Where {(
$_.Extension -ne ".mp3" -and
$_.Extension -ne ".wmv" )} |
Set-ItemProperty -Name Attributes -Value "Hidden" -WhatIf |
Rename-Item -NewName {$_.Name -replace $_.Extension, -join($_.Extension, ".notmusic")} -
WhatIf
Get-ChildItem -Recurse -Force | Where {( $_.Extension -ne ".mp3" -and $_.Extension -ne ".wmv" )} | ForEach-Object {
Set-ItemProperty -Name Attributes -Value "Hidden" -Path $_.FullName -WhatIf
Rename-Item -Path $_.FullName -NewName "$($_.Name).notmusic" -WhatIf
}
我加在Set-ItemProperty-Path
Set-ItemProperty -Name Attributes -Value "Hidden" -Path $_.FullName -WhatIf
我改变了Rename-Item-Path
和-NewName
Rename-Item -Path $_.FullName -NewName "$($_.Name).notmusic"
For-Each:
Get-ChildItem -Recurse -Force | Where {( $_.Extension -ne ".mp3" -and $_.Extension -ne ".wmv" )} | ForEach-Object {
$_ | Set-ItemProperty -Name Attributes -Value "Hidden" -WhatIf
$_ | Rename-Item -NewName { $_.Name -replace $_.Extension, -join($_.Extension, ".notmusic")} -WhatIf
}
我看到您目录中的前几节 grab 文件不是 mp3 或 wmv 文件。
Get-ChildItem -Recurse -Force | Where {($_.Extension -ne ".mp3" -and $_.Extension -ne ".wmv")}
那部分不错。但是由于您对每个文件执行了两项操作,因此您应该以
的形式通过管道传输到 ForEach-Object... | ForEach-Object {
# do something
# do something else
}
并且由于您没有直接通过管道传输到 Set-ItemProperty cmdlet,因此您需要将文件名的路径传递给它:
Set-ItemProperty -Path $_.FullName -Name Attributes -Value "Hidden"
然后我们进入您的重命名命令。看起来您希望名称为 filename.notmusic。同样,我们需要将文件路径传递给 cmdlet。另请注意如何使用子表达式 clean/nice 定义新名称的方法
Rename-Item -Path $_.FullName -NewName "$($_.BaseName).notmusic"
好的,所以把它们放在一起,我们有:
Get-ChildItem -Recurse -Force | Where-Object {($_.Extension -ne ".mp3" -and $_.Extension -ne ".wmv")} | ForEach-Object {
Set-ItemProperty -Path $_.FullName -Name Attributes -Value "Hidden" -WhatIf
Rename-Item -Path $_.FullName -NewName "$($_.BaseName).notmusic" -WhatIf
}