计划的服务/脚本/batch file,以在窗口上的相同目录中具有相似文件名的其他文件的条件下移动文件

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

  1. 在一个特定的目录中
  2. 对于其中的每个文件
  3. 如果存在(在同一目录中)2个具有相似名称的文件(实际上具有附加扩展名的相同名称,即'file1.mov'将需要'file1.mov.flv'和'file1.mov.mpg'存在),然后将该文件移动到另一个磁盘上的另一个目录。

以下是我到目前为止的batch file,但我挣扎。 我也打开另一种技术/机制。

@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文件。 将执行设置为从powershell提示符(以pipe理员身份运行启动)remoteigned: Set-ExecutionPolicy RemoteSigned

我根据你的要求为你创build并testing了这个脚本

然后,您需要创build一个调度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 } } }