windows - PowerShell 找不到项目 - 带空格的路径 IOException

标签 windows string powershell path

# --------------------------------------------------------- 
# ScriptingGamesBeginnerEvent8_PS1.ps1 
# ed wilson, msft 8/21/2009 
# PS1 version of HSG-08-19-09 http://bit.ly/1d8Rww 
# 
# --------------------------------------------------------- 
Param( 
 [string]$path = 'C:\', 
 [int]$first = 50 
)# end param 
# *** Function Here *** 

function Get-DirSize ($path){ 

  BEGIN {} 

  PROCESS{ 
    $size = 0 
    $folders = @() 

    foreach ($file in (Get-ChildItem $path -Force -ea SilentlyContinue)) { 
      if ($file.PSIsContainer) { 
        $subfolders = @(Get-DirSize $file.FullName) 
        $size += $subfolders[-1].Size 
        $folders += $subfolders 
      } else { 
        $size += $file.Length 
      } 
    } 

    $object = New-Object -TypeName PSObject 
    $object | Add-Member -MemberType NoteProperty -Name Folder -Value (Get-Item $path).fullname
    $object | Add-Member -MemberType NoteProperty -Name Size -Value $size 
    $folders += $object 
    Write-Output $folders 
  } 

  END {} 
} # end function Get-DirSize 

Function Get-FormattedNumber($size) 
{ 
  IF($size -ge 1GB) 
   { 
      "{0:n2}" -f  ($size / 1GB) + " GigaBytes" 
   } 
 ELSEIF($size -ge 1MB) 
    { 
      "{0:n2}" -f  ($size / 1MB) + " MegaBytes" 
    } 
 ELSE 
    { 
      "{0:n2}" -f  ($size / 1KB) + " KiloBytes" 
    } 
} #end function Get-FormattedNumber 

 # *** Entry Point to Script *** 

 if(-not(Test-Path -Path $path))  
   {  
     Write-Host -ForegroundColor red "Unable to locate $path"  
     Help $MyInvocation.InvocationName -full 
     exit  
   } 
 Get-DirSize -path $path |  
 Sort-Object -Property size -Descending |  
 Select-Object -Property folder, size -First $first | 
 Format-Table -Property Folder,  
  @{ Label="Size of Folder" ; Expression = {Get-FormattedNumber($_.size)} } 

所以我有这个脚本 http://gallery.technet.microsoft.com/scriptcenter/36bf0988-867f-45be-92c0-f9b24bd766fb#content

我一直在研究它并创建了一个批处理文件来帮助处理该文件的日志输出等。但是,我注意到其中带有空格的路径不会被读取。例如..文档\我的音乐

    Get-Item : Could not find item C:\Users\MyUser\Documents\My Music.
    At C:\test.ps1:32 char:80
    +     $object | Add-Member -MemberType NoteProperty -Name Folder -Value (Get-It
    em <<<<  $path).fullname
+ CategoryInfo          : ObjectNotFound: (C:\Users\MyUser\Documents\My
Music:String) [Get-Item], IOException
 + FullyQualifiedErrorId : ItemNotFound,Microsoft.PowerShell.Commands.GetIt
emCommand

在代码的 TechNet 页面上,有人提出了该问题,但没有给出解决方案。我不知道如何在这里修复它。我使用了 $path 参数,将其括在“”或“”等中。

这是执行它的批处理文件的一部分:

  C:\WINDOWS\system32\WindowsPowerShell\v1.0\powershell.exe -noe -command "&       'C:\test.ps1' -path "'C:\Users\MyUser\'""

最佳答案

在这里回答可能有点晚了,但是,正如 Aaron 提到的,这不是由于路径中的空格造成的。

如果您阅读 Get-Item 的文档cmdlet 中,有一个 -Force 开关,它允许 cmdlet 获取无法通过其他方式访问的项目,例如隐藏项目。

此外,从您的代码看来,您并不希望将通配符模式传递给 cmdlet,因此您应该使用 (Get-Item $path).FullName 而不是

(Get-Item -force -LiteralPath $path).FullName

这应该可以解决这个问题。

关于windows - PowerShell 找不到项目 - 带空格的路径 IOException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17572541/

相关文章:

windows - 如何使用PowerShell查找事件设备ID?

javascript - 如何在Javascript中检查字符串中是否存在数组元素?

ios - 使用 NSCharcterSet 进行 URL 编码

powershell - Windows Server 2008 R2 中的私钥被意外删除

powershell - PowerShell 中使用 PSScriptAnalyzer 的 OutputType 属性警告

java - 我可以将字符串变量从 eclipse (java) 发送到 powershell 脚本吗

python - Windows 10 pip 安装 'Failed Connection'

python - 从 windows 系统服务 python 调用 .exe?

python - 如何检查 Python 中是否存在原始(未安装的)Windows 驱动器

使用智能字符串进行恒定时间字符串反转?