Powershell 脚本移动和重命名文件

Powershell 脚本移动和重命名文件

免责声明:我对 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

相关内容