Назад | Перейти на главную страницу

Запланированный сервис / сценарий / пакетный файл для перемещения файлов при условии, что другие файлы с аналогичными именами файлов в том же каталоге в Windows

В Windows Server (Data Center? 2008?) Я пытаюсь настроить запланированную задачу, которая будет:

  1. В определенном каталоге
  2. Для каждого файла в нем
  3. Если существует (в одном каталоге) 2 файла с похожими именами (на самом деле одно и то же имя с дополнительными расширениями, отмеченными тегами, то есть для 'file1.mov' потребуется как 'file1.mov.flv', так и 'file1.mov.mpg' чтобы существовать), затем переместите файл в другой каталог на другом диске.

Ниже приводится то, что у меня есть для пакетного файла, но я борюсь. Я также открыт для другой техники / механизма.

@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

вот способ сделать это в PowerShell. Сохраните как файл .ps1. Установите для выполнения команду remoteigned из командной строки PowerShell (запуск с правами администратора): Set-ExecutionPolicy RemoteSigned

Я создал и протестировал для вас этот сценарий на основании того, что вы просили

Затем вам нужно создать запланированную задачу, которая вызывает powershell.exe со сценарием в качестве аргумента

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