1

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

$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 $txtfileget-content似乎是我问题的核心。

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

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

4

1 回答 1

2

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

Get-Content $txtFile.FullName

当您指定 时Get-Content $txtFile,PowerShell 会尝试将参数 $txtFile 强制转换为所需的参数 Path,为此,它会将 FileInfo 对象强制转换为字符串。这个过程只产生文件的名称。

另一种方法是:

$txtFile | Get-Content
于 2013-01-29T17:00:42.990 回答