任务调度程序批处理作业执行

问题描述 投票:0回答:1

下面的批处理作业执行有一个小问题,如代码片段所示。批处理作业在其所在的目录(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" 
batch-file scheduled-tasks
1个回答
1
投票

这是一个帮助你的例子:

@Echo Off
Set "My_Path=C:\Temp\TestFile"
If Not Exist "%My_Path%\*.xlsx" Exit /B
CD /D "%My_Path%"

Set "ds="
For /F "Tokens=1-3Delims=/ " %%A In ('RoboCopy /NJH /L "\|" Null'
)Do If Not Defined ds Set "ds=%%A-%%B-%%C"

For /F "Delims=" %%A In (
    'Dir /B/A-D-L *.xlsx^|FindStr /VLG:"valid_naming_conventions.txt"'
)Do (If Not Exist "Archive\" MD "Archive"
    Move /Y "%%A" "Archive\%%~nA__%ds%%%~xA")

您可能希望考虑是否有意将任务与批处理文件本身在同一目录中运行。在这种情况下,您将没有硬编码路径,因为您可以扩展批处理文件本身的特殊元变量%0

@Echo Off
If Exist "%~dp0*.xlsx" (CD /D "%~dp0")Else Exit /B

Set "ds="
For /F "Tokens=1-3Delims=/ " %%A In ('RoboCopy /NJH /L "\|" Null'
)Do If Not Defined ds Set "ds=%%A-%%B-%%C"

For /F "Delims=" %%A In (
    'Dir /B/A-D-L *.xlsx^|FindStr /VLG:"valid_naming_conventions.txt"'
)Do (If Not Exist "Archive\" MD "Archive"
    Move /Y "%%A" "Archive\%%~nA__%ds%%%~xA")
© www.soinside.com 2019 - 2024. All rights reserved.