Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
For loop 批处理文件删除“删除”;指定目标上的文件名或目录名";消息_For Loop_Batch File_Subroutine_Xcopy - Fatal编程技术网

For loop 批处理文件删除“删除”;指定目标上的文件名或目录名";消息

For loop 批处理文件删除“删除”;指定目标上的文件名或目录名";消息,for-loop,batch-file,subroutine,xcopy,For Loop,Batch File,Subroutine,Xcopy,我的批处理文件有一个问题,它在每次查看指定文件夹然后调用命名约定的子例程之间有10秒的延迟: 我已经根据Ken White修改了代码,这非常有帮助,但是我还有另一个问题与此批处理进一步相关,即当运行批处理时,我在源目录中更新并保存测试文件,批处理在cmd控制台中要求我“在目标上指定文件名或目录名”对于它查看的每个文件。因为我想让它在后台自动运行,所以我不想让用户输入它才能正常运行。任何帮助或建议都会非常有用 以下是我目前的情况: @Echo Off & setlocal ENABLEEX

我的批处理文件有一个问题,它在每次查看指定文件夹然后调用命名约定的子例程之间有10秒的延迟:

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

以下是我目前的情况:

@Echo Off & setlocal ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION
:: variables
set drive=C:\Users\me\Desktop\Test Source Folder\
set backupcmd=xcopy /m /s /c /d /e /h /i /r /y
Set _Delay=10
Set _Monitor=C:\Users\me\Desktop\Test 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:\Users\me\Desktop\Test Destination Folder\!baseName!!baseExt!"
         set baseName=%%~Na
         set baseExt=%%~Xa
         set lastName=%%~Na
      )
   )      
)
rem Copy last set
%backupcmd% "!lastName!!baseExt!" "C:\Users\me\Desktop\Test 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:\Users\me\Desktop\Test Source     Folder" "C:\Users\me\Desktop\Test Destination Folder\"

::CALL "C:\users\me\Desktop\Test Source Folder\Test.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:\Users\me\Desktop\Test 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:\Users\me\Desktop\Test 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:\Users\me\Desktop\Test Destination Folder\!baseName!!baseExt!"
            set baseName=%%~Na
            set baseExt=%%~Xa
            set lastName=%%~Na
            %backupcmd% "%%a" "C:\Users\me\Desktop\Test Destination Folder\"
        )
    )
)

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

%backupcmd% "!lastName!!baseExt!" "C:\Users\me\Desktop\Test 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:\Users\me\Desktop\Test 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:\Users\me\Desktop\Test Destination Folder\!baseName!!baseExt!"
            set baseName=%%~Na
            set baseExt=%%~Xa
            set lastName=%%~Na
            %backupcmd% "%%a" "C:\Users\me\Desktop\Test Destination Folder\"
        )
    )
)

我确实需要重命名它们,源目录包含(ie)example.xls和exampleA.xls。我确实需要重命名它们,源目录包含(ie):example.xls和exampleA.xls,dest dir包含:example.xls。批处理文件ev 10s将监视源目录并复制任何更新或新文件(即exampleA.xls)将作为example.xls(替换名为example.xls的现有文件)复制到dest目录@cheapkid1哎呀,我键入了我的
%a
s-它们当然应该是
%a
。很抱歉。这有帮助吗?操作最慢的部分是复制需要复制的文件。只检查每个批次的第一个文件,该操作将相对较快。使用
find/v
减少输出实际上可能会导致更大的速度差异。@cheapkid1您可以在
%backupcmd%
行的末尾附加
|find/v“0个已复制文件”
,或者将最后一行更改为
)| find/v“0个已复制文件”
也应该可以。我确实需要重命名它们,源目录包含(ie)example.xls和exampleA.xls。我确实需要重命名它们,源目录包含(ie):example.xls和exampleA.xls,dest dir包含:example.xls。批处理文件ev 10s将监视源目录并复制任何更新或新文件(即exampleA.xls)将作为example.xls(替换名为example.xls的现有文件)复制到dest目录@cheapkid1哎呀,我键入了我的
%a
s-它们当然应该是
%a
。很抱歉。这有帮助吗?操作最慢的部分是复制需要复制的文件。只检查每个批次的第一个文件,该操作将相对较快。使用
find/v
减少输出实际上可能会导致更大的速度差异。@cheapkid1您可以在
%backupcmd%
行的末尾附加
|find/v“0个已复制文件”
,或者将最后一行更改为
)| find/v“0个已复制文件”
也应该有效。可能重复的可能重复的