2016-04-13 11 views
0

フォルダーをループして、フォルダー内の各ファイルのファイル名を取得しようとしています。私はその後、その変数を後でハッシュテーブルで使用します。これは私が問題を抱えて、このエラーを受信し続けるのです場所です。ここでPowershell - ループごとにファイル名を変数に割り当てるときに属性エラーが発生する

At C:\Users\jnwankwo\Documents\IUR.ps1:19 char:16 
+ Files.Add(fName, Counter) 
+    ~ 
Missing argument in parameter list. 

はコードです:

$folder = 'C:\Users\jnwankwo\Documents\IUR Test\r' # Enter the root path you   want to monitor. 
$Failedfolder = 'C:\Users\jnwankwo\Documents\IUR Test\r' 
$filter = '*.*' # You can enter a wildcard filter here. 
$Files = @{} 
$Counter = 1 


# In the following line, you can change 'IncludeSubdirectories to $true if   required.       
$fsw = New-Object IO.FileSystemWatcher $folder, $filter -Property  @{IncludeSubdirectories = $false;NotifyFilter = [IO.NotifyFilters]'FileName,  LastWrite'} 

Register-ObjectEvent $fsw Created -SourceIdentifier FileCreated -Action { 

ForEach ($file in folder) { 

$fName = file.Name 

if (Files.ContainsKey(fName) = false) 
{ 

Files.Add(fName, Counter) 

} 

if ((Files.ContainsKey(fName) = true) -and (Files.Item(fName) -lt 3)) 
{ 
Move-Item C:\Users\jnwankwo\Documents\IUR Test\r\*.txt  C:\Users\jnwankwo\Documents\IUR Test -force 
Files.Set_Item(fName, Counter++) 

} 
ElseIf ((Files.ContainsKey(fName) = true) -and (Files.Item(fName) == 3)) 
{ 
Files.Remove(fName) 
Move-Item C:\Users\jnwankwo\Documents\IUR Test\r\*.txt Failedfolder -force 
} 

} 

} 

誰かが助けてくださいことはできますか?

答えて

1

変数の前に$がありません。 fNameをすべて$fNameに置き換えてください。 file.Nameから$file.Nameに名前を変更する必要があります。またFiles.Add($fName, Counter)Counter$を逃すと、あなたは$false代わりのfalseを記述する必要があります....

これは修正版のようになります。

$folder = 'C:\Users\jnwankwo\Documents\IUR Test\r' # Enter the root path you   want to monitor. 
$Failedfolder = 'C:\Users\jnwankwo\Documents\IUR Test\r' 
$filter = '*.*' # You can enter a wildcard filter here. 
$Files = @{} 
$Counter = 1 


# In the following line, you can change 'IncludeSubdirectories to $true if   required.       
$fsw = New-Object IO.FileSystemWatcher $folder, $filter -Property  @{IncludeSubdirectories = $false;NotifyFilter = [IO.NotifyFilters]'FileName,  LastWrite'} 

Register-ObjectEvent $fsw Created -SourceIdentifier FileCreated -Action { 

    ForEach ($file in $folder) 
    { 
     $fName = $file.Name 

     if (-not $Files.ContainsKey($fName)) 
     { 
      $Files.Add($fName, $Counter) 
     } 

     if (($Files.ContainsKey($fName)) -and ($Files.Item($fName) -lt 3)) 
     { 
      Move-Item 'C:\Users\jnwankwo\Documents\IUR Test\r\*.txt' 'C:\Users\jnwankwo\Documents\IUR Test' -force 
      $Files.Set_Item($fName, $Counter++) 

     } 
     ElseIf (($Files.ContainsKey($fName)) -and ($Files.Item($fName) -eq 3)) 
     { 
      $Files.Remove($fName) 
      Move-Item 'C:\Users\jnwankwo\Documents\IUR Test\r\*.txt' $Failedfolder -force 
     } 
    } 
} 
+0

こんにちは、私はこれを試してみましたが、私は今、このエラーを取得:後に行方不明の式を '' – Hitmand

+0

私は私の答えを更新しました –

0

うんjisaakが言ったように、あなたが見逃していましたそれを表現する変数

すべての宣言を変数に置き換えると、問題が解決する可能性があります。

もう1つ、次回powershellスクリプトを作成しようとすると、PSDebugコマンドレットを使用してスクリプトをデバッグしてみてください。それは非常に便利です。私はそれが非常に便利だと思う。

スクリプトを実行する前に、またはスクリプトの先頭に以下のコードを追加してください。

は、Set-PSDebug -Trace 1

関連する問題