Script Powershell para mover e renomear arquivos

1

Disclaimer: Eu tenho zero compreensão do Powershell. Inicialmente eu ia fazer isso em Java, então decidi fazer uma tarefa agendada, (Executando um script PoSh).

Isso é o que eu tenho:

$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}

O que é suposto estar fazendo: Se o processo A2OA.exe não estiver em execução, verifique se existe um arquivo ArmA2OA.rpt no diretório C:\Users\Mark27\AppData\Local\ArmA 2 OA\ . Se isso for verdade, copie e renomeie o arquivo usando o timestamp atual e envie-o para C:\Users\Mark27\Desktop\A2OA

Se o arquivo não existir ou o processo estiver em execução, cancele.

Já passei por várias perguntas semelhantes, mas não encontrei minha solução. O diretório e o nome do arquivo que estou procurando sempre serão os mesmos. (Este script será configurado para executar a cada 10-15 minutos.)

    
por Michael Redbourne 22.05.2017 / 22:14

2 respostas

1

Você tem um espaço extra no primeiro comando. Deve ser -ErrorAction , você tem - ErrorAction

Além disso, você não precisa de nenhuma das instruções else.

$currentDate não é necessário.

Eu recomendo o uso do PowerShell ISE para ajudá-lo a criar esses scripts, pois permite percorrer o script, executar scripts parciais e facilitar a obtenção de informações.

    
por 22.05.2017 / 22:19
1

O script a seguir é um pouco simplificado. Ele não verifica explicitamente a existência de $ checkFile, mas tenta Get-Item, se for bem sucedido, é canalizado para Move-Item.
Se usa o operador ! não requer outro par de parênteses.

$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}

Se a saída parece OK, remova o -WhatIf

    
por 23.05.2017 / 01:42

Tags