Batch file 任务计划程序批处理作业执行

Batch file 任务计划程序批处理作业执行,batch-file,scheduled-tasks,Batch File,Scheduled Tasks,我对下面的批处理作业执行有一个小问题,如代码片段所示。批处理作业在其所在的目录(C:\Temp\TestFile)中触发时执行良好。然而,我注意到,当我通过任务调度器安排作业执行时,什么也没有发生。任务计划程序使用带有“无论用户是否登录都运行”选项的服务帐户 @echo off for /f "delims=" %%a in ('wmic OS Get localdatetime ^| find "."') do set DateTime=%%a set Yr=%Da

我对下面的批处理作业执行有一个小问题,如代码片段所示。批处理作业在其所在的目录(C:\Temp\TestFile)中触发时执行良好。然而,我注意到,当我通过任务调度器安排作业执行时,什么也没有发生。任务计划程序使用带有“无论用户是否登录都运行”选项的服务帐户

    @echo off

    for /f "delims=" %%a in ('wmic OS Get localdatetime ^| find "."') do set DateTime=%%a

    set Yr=%DateTime:~0,4%
    set Mon=%DateTime:~4,2%
    set Day=%DateTime:~6,2%
    set Hr=%DateTime:~8,2%
    set Min=%DateTime:~10,2%

    for /f "delims=" %%I in ('dir /b *.xlsx ^| findstr /vlg:"valid_naming_conventions.txt"') do move "%%I" "C:\Temp\TestFile\Archive\%%~nI__%Yr%-%Mon%-%Day%%%~xI"
我相信服务帐户无法识别该目录。但是,在我对以下内容进行更改后,仍然不会发生任何事情,并且不符合文本文件中指定的有效命名约定的文件仍然保留在同一目录中,并且不会移动到存档文件夹中:

    @echo off

    for /f "delims=" %%a in ('wmic OS Get localdatetime ^| find "."') do set DateTime=%%a

    set Yr=%DateTime:~0,4%
    set Mon=%DateTime:~4,2%
    set Day=%DateTime:~6,2%
    set Hr=%DateTime:~8,2%
    set Min=%DateTime:~10,2%

    set MY_PATH="C:\Temp\TestFile"

    for /f "delims=" %%I in ('%MY_PATH% /b *.xlsx ^| findstr /vlg:"valid_naming_conventions.txt"') do move "%%I" "C:\Temp\TestFile\Archive\%%~nI__%Yr%-%Mon%-%Day%%%~xI"
非常感谢您在这方面的帮助。期待您的建议


运行任务计划程序后的输出:

    C:\Windows\system32>rem @echo off 

    C:\Windows\system32>for /F "delims=" %a in ('wmic OS Get localdatetime | find "."') do set DateTime=%a 

    C:\Windows\system32>set DateTime=20190414170803.358000+120  


    C:\Windows\system32>set Yr=2019 

    C:\Windows\system32>set Mon=04 

    C:\Windows\system32>set Day=14 

    C:\Windows\system32>set Hr=17 

    C:\Windows\system32>set Min=08 

    C:\Windows\system32>set 
    MY_PATH="C:\Temp\TestFile" 

    C:\Windows\system32>for /F "delims=" %I in ('dir /B/A-D "C:\Temp\TestFile"\*.xlsx | findstr /vlg:"valid_naming_conventions.txt"') do move "%I" "C:\Temp\TestFile\Archive\%~nI__2019-04-14%~xI" 

    C:\Windows\system32>move "01-TestFile.xlsx" "C:\Temp\TestFile\Archive\01-TestFile__2019-04-14.xlsx" 

    C:\Windows\system32>move "02-TestFile.xlsx" "C:\Temp\TestFile\Archive\02-TestFile__2019-04-14.xlsx" 

    C:\Windows\system32>move "03-TestFile.xlsx" "C:\Temp\TestFile\Archive\03-TestFile__2019-04-14.xlsx"

    C:\Windows\system32>move "04-TestFile.xlsx" "C:\Temp\TestFile\Archive\04-TestFile__2019-04-14.xlsx" 

    C:\Windows\system32>move "05-TestFile.xlsx" "C:\Temp\TestFile\Archive\05-TestFile__2019-04-14.xlsx" 

    C:\Windows\system32>move "06-TestFile.xlsx" "C:\Temp\TestFile\Archive\06-TestFile__2019-04-14.xlsx" 

以下是一个帮助您的示例:

@Echo关闭
设置“My_Path=C:\Temp\TestFile”
如果不存在“%My\u Path%\*.xlsx”退出/B
CD/D“%我的路径%”
设置“ds=”
对于('RoboCopy/NJH/L“\\\\”Null'中的/F“Tokens=1-3Delims=/”%%A
)如果未定义ds,则不设置“ds=%%A-%%B-%%C”
对于/F“Delims=”%%A In(
“Dir/B/A-D-L*.xlsx^ FindStr/VLG:“valid_naming_conventions.txt””
)不存在(如果不存在“存档\”MD“存档”
移动/Y“%%A”存档\%%~nA\uuDS%%%%~xA”)
<>你可能想考虑你的意图是让任务运行在与批处理文件本身相同的目录中。在这种情况下,您将没有硬编码的路径,因为您可以展开批处理文件本身的特殊元变量,
%0

@Echo关闭
如果存在“%~dp0*.xlsx”(CD/D“%~dp0”),则退出/B
设置“ds=”
对于('RoboCopy/NJH/L“\\\\”Null'中的/F“Tokens=1-3Delims=/”%%A
)如果未定义ds,则不设置“ds=%%A-%%B-%%C”
对于/F“Delims=”%%A In(
“Dir/B/A-D-L*.xlsx^ FindStr/VLG:“valid_naming_conventions.txt””
)不存在(如果不存在“存档\”MD“存档”
移动/Y“%%A”存档\%%~nA\uuDS%%%%~xA”)

服务帐户是否有足够的权限访问
C:\Temp\TestFile
C:\Temp\TestFile\Archive
?@Compo:是的,我的管理员帐户和服务帐户都有完全权限,并且对服务器上的本地C:具有完全访问权限。目录
C:\Temp\TestFile\Archive
是否存在?更重要的是,为什么要使用
%MY\u PATH%/b*.xlsx
而不是
Dir/b/A-D%MY\u PATH%\*.xlsx
@Compo:目录存在。我尝试了您建议的更改,但仍然不走运…当我检查任务计划程序时,显示(0x1)为上次运行结果,而不是成功完成的操作(0x0)。@Compo:请参阅上面运行任务计划程序后的输出。目录中的文件名似乎已被识别,但由于某些原因未被移动。感谢@Compo,解决了此问题!:)文件名在存档时会附加日期戳(“ds=%%A-%%B-%%C”),因此01-TestFile.xlsx将成为01-TestFile_uu2019-04-15。除此之外,如何根据系统日期进行检查并删除超过2天(即2019-04-13及更早)的文件?