如果我运行这个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)
}
答案 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