免责声明:我对 Powershell 一无所知。最初我打算用 Java 来做这件事,后来决定改为执行计划任务(执行 PoSh 脚本)。
这就是我所拥有的:
$ArmA2OA = Get-Process ArmA2OA - ErrorAction SilentlyContinue
$ChkFile = "C:\Users\Mark27\AppData\Local\ArmA 2 OA\ArmA2OA.rpt"
$FileExists = Test-Path $ChkFile
$currentDate = get-date -uformat "%Y-%m-%d@%H-%M-%S"
if(-Not($ArmA2OA)){
if($FileExists){
move-item "C:\Users\Mark27\AppData\Local\ArmA 2 OA\ArmA2OA.rpt" ("C:\Users\Mark27\Desktop\A2OA\{0:yyyyMMdd}.rpt" -f (get-date))
}
else{break}
}
else{break}
它应该做什么:如果进程A2OA.exe
没有运行,则检查ArmA2OA.rpt
目录中是否存在文件C:\Users\Mark27\AppData\Local\ArmA 2 OA\
。如果是,则使用当前时间戳复制并重命名文件并将其发送到C:\Users\Mark27\Desktop\A2OA
如果文件不存在或者进程正在运行,则中止。
我遇到过许多类似的问题,但还没有找到解决方案。我要查找的目录和文件名始终相同。(此脚本将设置为每 10-15 分钟执行一次。)
答案1
第一个命令中有一个多余的空格。应该是-ErrorAction
,你有- ErrorAction
此外,您不需要任何 else 语句。
$currentDate
是不需要的。
我建议使用 PowerShell ISE 来帮助您创建这些脚本,因为它可以让您逐步执行脚本、运行部分脚本并且更容易获取帮助信息。
答案2
以下脚本稍微精简了一点。它没有明确检查 $checkFile 是否存在,而是尝试 Get-Item,如果成功,则将其传送到 Move-Item。
如果使用!
not 运算符,则需要另一对括号。
$ChkFile = "C:\Users\Mark27\AppData\Local\ArmA 2 OA\ArmA2OA.rpt"
$Template = "C:\Users\Mark27\Desktop\A2OA\{0:yyyyMMdd}.rpt"
If (!(Get-Process ArmA2OA -ErrorAction SilentlyContinue)){
Get-Item $chkFile -ErrorAction SilentlyContinue|
Move-Item -Destination {$Template -f (Get-Date)} -WhatIf
}
# short version using aliases but equal functionality
# If (!(PS ArmA2OA -EA 0)){GI $chkFile -EA 0|Move -Dest {$Template -f (Get-Date)} -WhatIf}
如果输出看起来正常,删除-WhatIf