2016-11-30 1 views
1

Ich habe einen Ordner und in diesem Ordner hat. TXT-Dateien mit Faxnummern als Teil des Dateinamens (die ersten 10 Zeichen enthalten die Faxnummer).Skript, das jede Datei separat liest

Ich versuche, ein Skript zu schreiben, das jeden Dateinamen für die Faxnummer liest und dann in eine "Steuerdatei" schreibt.

Es kann jedoch nicht alle Faxnummern in die Steuerdatei gleichzeitig setzen. Ich brauche es, um die Faxnummer von Datei 1 zu lesen und in die Steuerdatei zu schreiben, dann auf Datei 2 zu gehen, die Faxnummer zu lesen und die Steuerdatei mit der Faxnummer von Datei 2 zu überschreiben. Und so weiter und so fort.

Das Skript Ich habe bisher die Faxnummern gelesen und schreibt in die Steuerdatei, aber es liest alle Faxnummern und fügt jedes zur Steuerdatei hinzu. Ich brauche es, um eins nach dem anderen zu schreiben.

Dies ist, was ich bisher:

$directory = "C:\Users\blah\Desktop\TestFolder" 
$controlfile = "C:\Users\blah\Desktop\Scripts\control.txt" 

$filename = Get-ChildItem -path $directory -name -filter *.txt 
foreach($file in $directory) 
{ 
    $faxnumber = $filename.substring(0,10) 
    Set-Content $controlfile "<tofaxnum:$faxnumber> 
<toname:XXX> 
<tocompany:XXX> 
<fromname: XXX> 
<fromphone:XXX>" -force 
} 

Also, wenn es 3 Dateien in $directory es alle 3 Faxnummern in der Steuerdatei als dann suchen Sie in der ersten Datei im Gegensatz schreibt, dann schreibt bewegend auf die zweite Datei schreiben und dann auf die dritte. Jede Hilfe oder Ideen, die Sie zur Verfügung stellen können, würden sehr geschätzt werden.

+0

kann ich Sie fragen, warum Sie nicht alle Faxnummern schreiben wollen auf einmal? –

+0

Die Steuerdatei wird von einem anderen Prozess verwendet, um ein Fax zu senden. Wenn die Kontrolldatei mehr als eine Faxnummer enthält, wird das Fax nicht gesendet. – zcheong

+0

ah okay, das macht Sinn. –

Antwort

2

Sie müssen Iterierte über jeden Dateinamen vom Get-ChildItem Cmdlets zurückgegeben, anstatt die Dateinamen verwenden innerhalb der Schleife:

$directory = "C:\Users\blah\Desktop\TestFolder" 
$controlfile = "C:\Users\blah\Desktop\Scripts\control.txt" 

$filenames = Get-ChildItem -path $directory -name -filter *.txt 
foreach($filename in $filenames) 
{ 
    $faxnumber = $filename.substring(0,10) 
    Set-Content $controlfile "<tofaxnum:$faxnumber> 
<toname:XXX> 
<tocompany:XXX> 
<fromname: XXX> 
<fromphone:XXX>" -force 
} 
+0

Netter Fang, Martin. Das habe ich komplett übersehen. – gravity

+0

Ich bin sehr neu dazu, kannst du mir das genauso erklären, wie du es einem kompletten Idioten erklären würdest? – zcheong

+0

Sie haben das Ergebnis des Cmdlets "Get-ChildItem" in "$ filename" gespeichert. Also ist '$ filename' eine ** Liste ** von Dateinamen, aber kein einziger Dateiname. Also habe ich die Variable in '$ filenames' geändert und sie in die' foreach'-Schleife eingefügt, um * über jeden Dateinamen * zu iterieren. Also wird in jeder Iteration der aktuelle Dateiname in '$ filename' gespeichert ... –

Verwandte Themen