gpt4 book ai didi

powershell - Get-ChildItem 结果看起来像 Powershell 中的相对路径

转载 作者:行者123 更新时间:2023-12-04 01:30:05 25 4
gpt4 key购买 nike

我想使用 Powershell 将文件夹(和子文件夹甚至更深的文件夹)从一个文件夹扫描并 move 到另一个文件夹。

目前我正在使用这个命令管道。

Get-ChildItem  -recurse  -path sub\WORK  -filter "* OK" | Where-Object { $_.PSIsContainer } | foreach { Move-Item -path $_  -destination sub\OK }

不幸的是它不起作用,因为找到的结果是相对于 .\sub\WORK ,当尝试 move 它们时,Move-Item 提示文件夹不在当前文件夹中:
Move-Item : Cannot find path 'C:\TMP\2011-12-12 test 2 OK' because it does not exist.

我希望 $_ 将包含: 'C:\TMP\sub\WORK\2011-12-12 test 2 OK'因为这些是 Powershell 中的对象,而不是 Linux 中的字符串。

最佳答案

如果您使用 Get-ChildItem , 要非常小心。最好的方法是将对象通过管道传送到 Move-Item你不需要多想:

Get-ChildItem  -recurse  -path sub\WORK  -filter "* OK" | Where-Object { $_.PSIsContainer } | Move-Item -destination sub\OK

(无需使用 Foreach-Object )

我回答的主要原因是这个: Get-ChildItem根据参数构造不同的对象。看例子:
PS C:\prgs\tools\Console2> gci -include * | % { "$_" } | select -fir 5
C:\prgs\tools\Console2\-verbose
C:\prgs\tools\Console2\1UpdateDataRepositoryServices.ps1
C:\prgs\tools\Console2\22-52-59.10o52l
C:\prgs\tools\Console2\2jvcelis.ps1
C:\prgs\tools\Console2\a
PS C:\prgs\tools\Console2> gci | % { "$_" } | select -fir 5
-verbose
1UpdateDataRepositoryServices.ps1
22-52-59.10o52l
2jvcelis.ps1
a

那么如果你使用 $_在一个循环中,PowerShell 需要转换 FileInfo来自 Get-ChildItem字符串,它给出了不同的结果。当您使用 $_ 时发生这种情况作为 Move-Item 的参数.很糟糕。

我认为有一个错误报告了这种行为。

关于powershell - Get-ChildItem 结果看起来像 Powershell 中的相对路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6928469/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com