计划服务/脚本/批处理文件在 Windows 上同一目录中存在具有相似文件名的其他文件的情况下移动文件

计划服务/脚本/批处理文件在 Windows 上同一目录中存在具有相似文件名的其他文件的情况下移动文件

在 Windows Server(数据中心?2008?)上,我正在尝试设置一个计划任务,它将:

  1. 在特定目录中
  2. 对于其中的每个文件
  3. 如果存在(在同一目录中)两个名称相似的文件(实际上是名称相同但附加了额外的扩展名,即“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

答案1

这是在 powershell 中执行此操作的方法。另存为 .ps1 文件。从 powershell 提示符将执行设置为 remotesigned(以管理员身份运行启动):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
        }
    }
}

相关内容