在 Windows Server(数据中心?2008?)上,我正在尝试设置一个计划任务,它将:
- 在特定目录中
- 对于其中的每个文件
- 如果存在(在同一目录中)两个名称相似的文件(实际上是名称相同但附加了额外的扩展名,即“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
}
}
}