路径变量在单个Powershell脚本中似乎不一致

时间:2013-01-29 16:28:22

标签: powershell path

我正在运行认为是一个相对简单的脚本:

$txtPath = "c:\users\xxxxxx\desktop\cgc\tx\" 
$srcfiles = Get-ChildItem $txtPath -filter "*.txt*"

ForEach($txtfile in $srcfiles) { 
        Write-Host $txtfile
        Get-Content $txtfile
}

我得到以下输出:

Automatic_Post-Call_Survey_-_BC,_CC.txt
Get-Content : Cannot find path 'C:\users\x46332\desktop\cgc\Automatic_Post-Call_Survey_-_BC,_CC.txt' because it does no
t exist.
At C:\users\x46332\desktop\cgc\testcount2.ps1:34 char:13
+     Get-Content <<<<  $txtfile
    + CategoryInfo          : ObjectNotFound: (C:\users\x46332...ey_-_BC,_CC.txt:String) [Get-Content], ItemNotFoundEx
   ception
    + FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.GetContentCommand

这是Write-Host $txtfile的输出,紧接着是Get-Content $txtfile,而get-content似乎是我问题的核心。

当我注释掉Get-Content行时,脚本会生成一个控制台文件名列表。这告诉我$txtPath已正确定义。但是,我为SAME文件/同一变量添加Get-Content,由于某种原因,路径的\tx部分从搜索字符串中消失。我的文件名打印出来,但是Get-Content找不到文件名的路径。

我怀疑“目录不存在”错误并不是指该目录不存在。那我应该怎么看?我的代码中没有很多空间可以隐藏错误,但我找不到它......想法?

1 个答案:

答案 0 :(得分:2)

Get-Content需要完整的路径,例如:

Get-Content $txtFile.FullName

当您指定Get-Content $txtFile时,PowerShell会尝试将参数$ txtFile强制转换为所需的参数Path并执行此操作,它会将FileInfo对象强制转换为字符串。此过程仅生成文件的名称。

另一种方法是:

$txtFile | Get-Content