#powershell
#powershell
Вопрос:
У меня есть файл длиной 309247 байт в виде этого изображения:
Если я запущу этот сценарий 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. Не удается воспроизвести. Очевидно, вы смотрите на другой файл.
2. Пожалуйста, покажите код, в котором
$file
задано значение. Я также не могу воспроизвести это и согласен, что вы, вероятно, просматриваете другой файл.3. Я все еще не могу воспроизвести. Использование
.length
— это правильный метод получения размера файла. Может быть, ваш путь содержит[
и]
? Если это так, они обрабатываются как подстановочные знаки.4.
$fpath = Get-Item -LiteralPath $file.FullName
Ответ №1:
Похоже, вы используете не тот командлет, который считаете нужным:
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