批处理文件摆脱"to specify a file name or a directory name on the target"消息



我的批处理文件有一个问题,每次查看指定文件夹然后调用命名约定的子例程之间都有 10 秒的延迟:...将目录中修改的文件复制到另一个目录的批处理

我已经根据 Ken White 修改了代码,这非常有帮助,但是我还有另一个与此批处理进一步相关的问题,即当批处理运行时,我执行测试文件更新并保存在源目录中,该批处理要求我在 cmd 控制台中"指定文件名或目标上的目录名称"对于它查看的每个文件。 由于我希望它在后台自动运行,因此我不希望用户输入才能正常运行。 任何帮助或建议将非常有帮助。

这是我目前拥有的:

@Echo Off & setlocal ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION
:: variables
set drive=C:UsersmeDesktopTest Source Folder
set backupcmd=xcopy /m /s /c /d /e /h /i /r /y
Set _Delay=10
Set _Monitor=C:UsersmeDesktopTest Source Folder
Set _Base=%temp%BaselineState.dir
Set _Chck=%temp%ChkState.dir
Set _OS=6
:_RevLoop
set basename=
for %%a in (*.*) do (
if not defined baseName (
    rem Is first name of first set
    set baseName=%%~Na
    set baseExt=%%~Xa
    set lastname=%%~Na
    ) else (
    rem Check if this name begin with same baseName
    set name=%%~Na
    for %%b in (!baseName!) do set name=!name:*%%b=!
      if "!name!" neq "%%~Na" (
         rem Yes: Is next name of same set
         set lastName=%%~Na
      ) else (
         rem No: Is first name of next set: copy previous set and pass to next one
         %backupcmd% "!lastName!!baseExt!" "C:UsersmeDesktopTest Destination Folder!baseName!!baseExt!"
         set baseName=%%~Na
         set baseExt=%%~Xa
         set lastName=%%~Na
      )
   )      
)
rem Copy last set
%backupcmd% "!lastName!!baseExt!" "C:UsersmeDesktopTest Destination Folder!    baseName!!baseExt!"

Ver|Findstr /I /C:"Version 5">Nul
If %Errorlevel%==0 Set _OS=5 & Set /A _Delay=_Delay*1000
:_StartMon
Call :_SetBaseline "%_Base%" "%_Monitor%"
:_MonLoop
If %_OS%==5 (Ping 1.0.0.0 -n 1 -w %_Delay%>Nul) Else Timeout %_Delay%>Nul
Call :_SetBaseline "%_Chck%" "%_Monitor%"
FC /A /L "%_Base%" "%_Chck%">Nul
If %ErrorLevel%==0 Goto _MonLoop

echo ___ Backing up JobBoss files...
::%backupcmd% "C:UsersmeDesktopTest Source     Folder" "C:UsersmeDesktopTest Destination Folder"
::CALL "C:usersmeDesktopTest Source FolderTest.bat"
ECHO ___ Checking for new file revisions...

GOTO :_RevLoop

Echo.Backup Complete!
Goto :_StartMon
:::::::::::::::::::::::::::::::::::::::::::::::::::
:: Subroutine
:::::::::::::::::::::::::::::::::::::::::::::::::::
:_SetBaseline
If Exist "%temp%tempfmstate.dir" Del "%temp%tempfmstate.dir"
For /F "Tokens=* Delims=" %%I In ('Dir /S "%~2"') Do (
Set _Last=%%I
 >>"%temp%tempfmstate.dir" Echo.%%I
)
>"%~1" Findstr /V /C:"%_Last%" "%temp%tempfmstate.dir"
Goto :EOF

假设您在复制文件时不需要重命名文件,请尝试

%backupcmd% "!lastName!!baseExt!" "C:UsersmeDesktopTest Destination Folder"

注意:我发现尾随否定了对/i开关的需求。

编辑:新策略。首先使用上述命令复制基本文件,然后在复制最终文件时,它将覆盖它而不提示。

for %%a in (*.*) do (
    if not defined baseName (
        rem Is first name of first set
        set baseName=%%~Na
        set baseExt=%%~Xa
        set lastname=%%~Na
        %backupcmd% "%%a" "C:UsersmeDesktopTest Destination Folder"
    ) else (
        rem Check if this name begin with same baseName
        set name=%%~Na
        for %%b in (!baseName!) do set name=!name:*%%b=!
        if "!name!" neq "%%~Na" (
            rem Yes: Is next name of same set
            set lastName=%%~Na
        ) else (
            rem No: Is first name of next set: copy previous set and pass to next one
            %backupcmd% "!lastName!!baseExt!" "C:UsersmeDesktopTest Destination Folder!baseName!!baseExt!"
            set baseName=%%~Na
            set baseExt=%%~Xa
            set lastName=%%~Na
            %backupcmd% "%%a" "C:UsersmeDesktopTest Destination Folder"
        )
    )
)

相关内容

最新更新