powershell错误的文件长度结果

时间:2016-10-06 19:11:19

标签: powershell

我有一个长度为309247字节的文件作为此图片: enter image description here

如果我运行这个powershell脚本:

(Get-Item 'C:\TestFile.082').length
309247

但是如果运行相同的脚本但是$file变量,它会返回:

$fpath = Get-Item $file.FullName
$fpath.length 
309800
# or 
(Get-Item $file.FullName).length
309800
# or
$file.length 
309800

注意 $ file是包含在目录中的所有文件的循环变量

为什么我引用同一个文件的结果不同?

如何获得真正的价值(309247)?

这是我的完整代码

$filesToFtp = Get-Item  $pathToFtp -Exclude "*.PreARM"  
foreach($file in $filesToFtp)
{
    $fpath = Get-Item $file.FullName
    $fpath.Length

    $FileNode = $oXMLDocumentFiles.CreateElement("element","curtmpremotelxml_files","")
    $nodoXML = "<versionnum>"+$versplain+"</versionnum>"+
                "<filename>"+$file.Name.ToUpper()+"</filename>"+
                "<filesize>"+$file.length+".00</filesize>"+
    $FileNode.InnerXml = $nodoXML
    $oXMLDocumentFiles.DocumentElement.AppendChild($FileNode)   
}

1 个答案:

答案 0 :(得分:0)

看起来您没有使用您认为的cmdlet:

 foreach( $file in (Get-Item 'c:\')) { ($file.FullName).Length }

是用于填充$ fPath的变量的精简版本,但它返回的是System.IO.FileSystemInfo对象,其中有一个名为FullPath的成员,一个字符串。

我认为你想要它

foreach( $file in (Get-ChildItem 'c:\')) { ($file.FullName).Length }

将返回子项的文件路径数组(或文件夹中的文件)

这也可以让你清理一些东西

$currentFilePath = $file.FullName
$fLength = $currentFilePath.Length
相关问题