2016-10-06 4 views
0

I mit einer Länge von 309.247 Bytes als dieses Bild eine Datei haben: enter image description herePower falsche Ergebnisse für Dateilänge

Wenn ich diese Powershell-Skript auszuführen:

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

Aber wenn das gleiche Skript laufen, aber einen $file Variable es gibt diese:

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

HINWEIS $-Datei ist eine variab le in eine Schleife für alle Dateien in einem Verzeichnis enthaltenen

Warum, wenn ich die gleiche Datei verweisen ich die Ergebnisse unterschiedlich sind?

Wie kann ich tun, um den tatsächlichen Wert (309247) zu erhalten?

Das ist mein Voll-Code

$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) 
} 
+6

kann nicht reproduzieren. Anscheinend siehst du eine andere Datei an. – wOxxOm

+2

Bitte zeigen Sie den Code, wo '$ file' gesetzt ist. Ich kann das auch nicht reproduzieren und stimme zu, dass du wahrscheinlich eine andere Datei anschaust. – alroc

+1

Ich kann immer noch nicht reproduzieren. Die Verwendung von '.length' ist die korrekte Methode, um die Dateigröße zu ermitteln. Vielleicht enthält dein Pfad "[' '' '' '? Wenn dies der Fall ist, werden diese als Platzhalter behandelt. – wOxxOm

Antwort

0

Es sieht aus wie Sie nicht das Cmdlet verwenden Sie denken, Sie sind:

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

eine verkürzte Version der Variable $ FPATH zu füllen, aber was es zurückgibt, ist ein System.IO.FileSystemInfo-Objekt, von dem es ein Mitglied namens FullPath gibt, eine Zeichenfolge.

Was ich nehme an, Sie wollen es

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

, die ein Array von Dateipfade der untergeordneten Elemente (oder Dateien innerhalb des Ordners) zurückkehren würde

Dies würde auch lassen ein paar Dinge aufzuräumen

$currentFilePath = $file.FullName 
$fLength = $currentFilePath.Length 
Verwandte Themen