我正在运行我认为是一个相对简单的脚本:
$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
找不到文件名的路径。
我怀疑“目录不存在”错误并不是指该目录不存在。那我应该怎么看?我的代码中没有很多空间可以隐藏错误,但我找不到它......想法?
答案 0 :(得分:2)
Get-Content需要完整的路径,例如:
Get-Content $txtFile.FullName
当您指定Get-Content $txtFile
时,PowerShell会尝试将参数$ txtFile强制转换为所需的参数Path并执行此操作,它会将FileInfo对象强制转换为字符串。此过程仅生成文件的名称。
另一种方法是:
$txtFile | Get-Content