Serviço / script / arquivo de lote agendados para mover arquivos com a condição de outros arquivos com nomes de arquivos semelhantes no mesmo diretório no Windows

1

No Windows Server (Data Center? 2008?), estou tentando configurar uma tarefa agendada que:

  1. Dentro de um diretório específico
  2. Para cada arquivo
  3. Se houver (no mesmo diretório) 2 arquivos com nomes semelhantes (na verdade, o mesmo nome com extensões extras marcadas, por exemplo, 'file1.mov' precisaria dos arquivos 'file1.mov.flv' AND 'file1.mov' .mpg 'para existir), então mova o arquivo para outro diretório em um disco diferente.

A seguir está o que eu tenho até agora para um arquivo em lote, mas estou com dificuldades. Eu também estou aberto a outra técnica / mecanismo.

@setlocal enableextensions enabledelayedexpansion
@echo off

SET MoveToDirectory=M:\_SourceVideosFromProduction
ECHO MoveToDirectory=%MoveToDirectory%
pause
for /r %%i in (*) do (

    REM ECHO %%i
    REM ECHO %%~nxi
    REM ECHO %%~ni
    REM ECHO filename=%filename%

    REM SET CurrentFilename=%%~ni
    REM ECHO CurrentFilename=%CurrentFilename%

    IF NOT %%~ni==__MoveSourceFiles (
        IF NOT x%%%~ni:\.=%==x%%%~ni% DO (
        REM SET HasDot=0

        REM FOR /F %%g IN %filename% do (
        REM     IF %%g==. (
                ECHO %filename%
        REM )
        )
    )
)

pause
    
por ilasno 22.03.2012 / 00:19

1 resposta

1

aqui é a maneira de fazer isso no powershell. Salve como um arquivo .ps1. Configure a execução para remotesigned do prompt do powershell (inicie com o run como administrador): Set-ExecutionPolicy RemoteSigned

Eu criei e testei esse script para você com base no que você pediu

Você precisa então criar uma tarefa agendada que chame powershell.exe com o script como argumento

$folder_source="c:\source"
$folder_dest="c:\dest"
$twin_files=@(".flv",".mpg")

foreach ($file in (get-childitem $folder_source))
{
    $move=$true
    foreach ($ext in $twin_files)
    {
        $filetocheck=$file.FullName+"$ext"
        if (!(Test-Path $filetocheck))
        {
            write-Output "$filetocheck not exist"
            $move=$false
        }
    }
    if ($move -eq $true)
    {
        write-output "files are being moved for $($file.FullName)"
        move-Item $file.FullName $folder_Dest
        foreach ($ext in $twin_files)
        {
              $filetocheck=$file.FullName+"$ext"
              move-Item $filetocheck $folder_Dest
        }
    }
}
    
por 02.04.2012 / 21:05