如何在Power shell中将Start Process用作FileSystemWatcher的操作


0

我能够成功使用System.IO.FileSystemWatcher来查看已创建文件的文件夹和子目录,但是当我尝试使用Start Process运行批处理文件时,它会运行一次,但之后再也不会触发。我从这里修改了答案。

这是我的powershell脚本

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

$action = { $path = $Event.SourceEventArgs.FullPath
            Write-Host "Event Fired"
            $ext = [io.path]::GetExtension($path)
            if($ext -eq ".wma"){
                $file = [io.path]::GetFileNameWithoutExtension($path)
                $folder = Split-Path(Split-Path $path -Parent) -Leaf
                $date = Get-Date -UFormat "%Y-%m-%d"
                $newName = $folder + "_" + $date + $ext
                $newPath = Rename-Item -path $path -newname $newName -PassThru
                Start-Process "C:\lectures\deploy.bat" $newPath
            }
          }

Register-ObjectEvent $watcher "Created" -Action $action
while ($true) {
    Write-Host "Still Alive"
    sleep 5
}

这是我正在运行的批处理文件

@echo off
CD %~dp1
ffmpeg -i %~nx1 %~n1.mp3 -loglevel panic
del %1
REM Winscp.com /ini=null /script=uploadScript.txt /parameter %~n1.mp3

powershell脚本在运行进程后继续运行,并且该进程似乎正在正常退出。如何让它继续处理事件?


我需要powershell脚本来查看文件夹,然后在创建新文件时执行某些操作。我不需要将任何参数传递给powershell我需要从powershell调用批量填充
N1mr0d

似乎在这方面工作正常。您是否期望将其重命名$watcher.Path =为不同的值,因此它while ($true) {是错误的,从而终止。对于那种类型的循环,只有当结果为真时它才是无穷无尽的,所以你确定你的其他逻辑正在按照文件夹名称做你期望的\_2017-08-29。你可能会考虑使用一个IF ELSE逻辑来处理结果,这个结果可能并不总是真实的,这取决于其他逻辑对我测试时看到的文件所在的文件夹名称的作用。
Pimp Juice IT于

检查是否Rename-Item -path $path -newname $newName -PassThru正在执行您期望的操作(如果.wma存在)。
Pimp Juice IT于

您是否有关于此任务的更新或任何新消息?根据我的测试和发现,这就是我在上述评论中所写的内容。
Pimp Juice IT
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.