2017-10-17 147 views
1

我有這個腳本是工作的罰款掃描特定的每個文件夾的PowerShell中的子文件夾

$watcher = New-Object System.IO.FileSystemWatcher 
$watcher.Path = "C:\folder_to_scan\" 
$watcher.Filter = "*.nrrd" 
$watcher.IncludeSubdirectories = $true 
$watcher.EnableRaisingEvents = $true 

$action = 
{ 
    $path = $Event.SourceEventArgs.FullPath 
    Write-Host "The file '$path' was $changeType at '$(Get-Date)'" -fore green    
} 
Register-ObjectEvent $watcher "Created" -Action $action 
while ($true) {sleep 3600} 

但在我C:\folder_to_scan\我有很多子目錄像001230024556002 ...而裏面每個人我有\THE_DIRECTORY_TO_SCAN

所以,我想這個$watcher.Path = "C:\folder_to_scan\*\THE_DIRECTORY_TO_SCAN\"$watcher.Path = "C:\folder_to_scan\[0-9]*\THE_DIRECTORY_TO_SCAN\"

但是,這是行不通的。在這種情況下可以使用通配符嗎?


如果不是,如何使用多路徑與FileSystemWatcher? 因爲我想通了,我們可以利用這個

Resolve-Path "C:\folder_to_scan\*\THE_DIRECTORY_TO_SCAN\" | Select -ExpandProperty Path 
+0

對不起,這是怎麼工作的罰款? while($ true){sleep 3600} 這將使您的腳本等待永恆,因爲$ true將始終爲真。你想要做的是一個do {} while() 所以你想要做的是掃描每個有「THE_DIRECTORY_TO_SCAN」這樣的名字的子目錄嗎? 我會做的是使用Get-childitem並搜索文件夾名稱中具有該名稱的所有路徑。當您獲得這些名稱時,您將開始專注於監控它們。 – Snak3d0c

+0

'睡眠3600'只能每小時監測一次。我縮短了這段代碼,因爲它更復雜,我在'action'中做了很多事情。無論如何,如何給出'FileSystemWatcher'的路徑列表? – Raccoon

回答

0

我不熟悉FileSystemWatcher所以我假設你只需要在文件夾路徑喂到$watcher.Path

我也假設你的代碼已經工作了。

嘗試使用Get-ChildItem並使用一個for循環:

$watcher = New-Object System.IO.FileSystemWatcher 
Get-ChildItem "C:\folder_to_scan\" -Recurse | ? { $_.PSIsContainer -and $_.Name.EndsWith("THE_DIRECTORY_TO_SCAN")}| %{ 
    $watcher.Path = $_.FullName #change this 
    $watcher.Filter = "*.nrrd" 
    $watcher.IncludeSubdirectories = $true 
    $watcher.EnableRaisingEvents = $true 
} 
    $action = 
    { 
     $path = $Event.SourceEventArgs.FullPath 
     Write-Host "The file '$path' was $changeType at '$(Get-Date)'" -fore green    
    } 
    Register-ObjectEvent $watcher "Created" -Action $action 
    while ($true) {sleep 3600} 
+0

我可以使用'Get-ChildItem'或'Resolve-Path'來檢索我的文章中解釋的路徑列表。但如何給'FileSystemWatcher'多個參數?這就是我卡住的地方。我是否必須使用'FileSystemWatcher'的多個實例?這似乎並不高雅 – Raccoon

+0

這幾乎是完美的。唯一的問題是在啓動powershell腳本後創建文件夾。不起作用...我試圖在最後一個'}之後放置'while($ true){sleep 3600}',但它不起作用 – Raccoon

+0

是的,我只是再次嘗試確定,並且是在 – Raccoon

0

確定,所以爲了澄清我早先提到。你只是在重複你的等待功能。爲了向你展示我的意思:

echo "This would be your code running." 
    while ($true) {sleep -second 3} 

這將打印句一次,然後繼續等待永遠持續3秒,每次$真實不虛。

你需要做的是:

do{ 
    echo "This would be your code running." 
    sleep -seconds 3 
} while($true) 

這將打印句子每3秒。 或者你的情況,每3秒運行一次觀察者。

+0

你是對的,但觀察者不會像那樣工作。 您可以檢查此[文檔](https://msdn.microsoft.com/fr-fr/library/system.io.filesystemwatcher(v = vs.110).aspx?cs-save-lang = 1&cs-lang = csharp#code-snippet-2)瞭解更多詳情 – Raccoon

0

我沒有找到一個完美的解決方案,所以我做了這個

if ($path -like '*\THE_DIRECTORY_TO_SCAN\*') 
{ Write-Host "File created in \THE_DIRECTORY_TO_SCAN" -fore green } 
else 
{ Write-Host "File created NOT in \THE_DIRECTORY_TO_SCAN" -fore red } 
相關問題