批处理文件包含另一批那份修改的文件目录到另一个目录 [英] batch-file incorporate another batch that copies modified files in directory to another directory

查看:200
本文介绍了批处理文件包含另一批那份修改的文件目录到另一个目录的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

下面是什么我已经出来了,但是我不能让XCOPY在我的code从什么Aacini在另一篇文章提供了正确的参考。 CMD控制台会说找不到文件!lastName的!! baseExt!然后显示0文件已被复制。这不是抄袭,因为我觉得XCOPY语法不允许换人,为源目录的关系如下XCOPY。

任何帮助将是非常美联社preciated。谢谢

  @回响
::变量
设置驱动器= C:\\用户\\我\\桌面\\测试源文件夹
设置backupcmd = XCOPY / M / S / C / D / E / H / I / R / Y /exclude:AutoFileCopy_Rev1.bat设置基本名称=
对于一个%%中(C:\\用户\\我\\桌面\\测试源文件夹)做(
    如果没有定义baseName的(
    REM是第一组头名
    设置baseName的= %%〜娜
    设置baseExt = %%〜Xa的
    一套姓氏= %%〜娜
    )其他(
    REM检查,如果这名以相同基开始
    集名称= %%〜娜
    在(!baseName的)%% b执行设置名称=名称:* %% B =!
      如果!名字! NEQ%%〜娜(
         REM是:是同一组的下一个名字
         设置的lastName = %%〜娜
      )其他(
         REM否:是下一组的第一个名字:复制previous设置,并传递给下一个
         %backupcmd%!的lastName !! baseExt! C:\\用户\\我\\桌面\\测试源文件夹\\ baseName的!baseExt!
         设置baseName的= %%〜娜
         设置baseExt = %%〜Xa的
         设置的lastName = %%〜娜
      )
   )

REM复制最后一组设置_delay = 10
设置_Monitor = C:\\用户\\我\\桌面\\测试源文件夹\\
设置_base =%TEMP%\\ BaselineState.dir
设置_Chck =%TEMP%\\ ChkState.dir
设置_OS = 6
版| Findstr工具/ I / C:第5版>讷
如果%ERRORLEVEL%== 0设置_OS = 5安培;设置/ A _delay = _delay * 1000
:_StartMon
呼叫:_SetBaseline%_base%%_Monitor%
:_MonLoop
如果_OS%==%5(平1.0.0.0 -n 1 -w%_delay%GT;讷),否则超时%_delay%GT;讷
呼叫:_SetBaseline%_Chck%%_Monitor%
FC / A / L%_base%%_Chck%>讷
如果%ERRORLEVEL%== 0转到_MonLoop呼应___备份JobBoss文件...
::%backupcmd%C:\\用户\\ john.weakley \\桌面\\测试源文件夹C:\\用户\\我\\桌面\\测试目标文件夹\\:: CALLC:\\用户\\我\\桌面\\测试源文件夹\\ TE​​ST.BATECHO ___检查新文件修订...
%backupcmd%!的lastName !! baseExt! C:\\用户\\我\\桌面\\测试源文件夹\\ baseName的!baseExt!Echo.Backup完成!转到:_StartMon
:::::::::::::::::::::::::::::::::::::::::::::::::: :
::子程序
:::::::::::::::::::::::::::::::::::::::::::::::::: :
:_SetBaseline
如果存在%temp%\\ tempfmstate.dir删除%temp%\\ tempfmstate.dir
FOR / F令牌= * = Delims我%%在('DIR / S%〜2')DO(
设置_Last = %%我
>方式>%temp%\\ tempfmstate.dir回声%%我

>中%〜1Findstr工具/ V / C:%_最后%%temp%\\ tempfmstate.dir
转到:EOF


解决方案

您需要启用延迟扩展,以支持!VAR!语法。

你的第一个行更改为:

 关闭@echo&放大器; SETLOCAL ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION

Here is what I've come up with, however I can't get the correct reference of xcopy in my code from what Aacini has provided in another post. cmd console will say it cannot find file "!lastName!!baseExt!" and then show that 0 files have been copied. It's not copying because I think the xcopy syntax will not allow for substitutions for the "source" "directory" relationship following xcopy.

Any help would be much appreciated. Thanks

@Echo Off
:: variables
set drive=C:\Users\me\Desktop\Test Source Folder
set backupcmd=xcopy /m /s /c /d /e /h /i /r /y /exclude:AutoFileCopy_Rev1.bat

set basename=
for %%a in ("C:\Users\me\Desktop\Test Source Folder") 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 Source Folder\!    baseName!!baseExt!"
         set baseName=%%~Na
         set baseExt=%%~Xa
         set lastName=%%~Na
      )
   )      
)
rem Copy last set

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
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\john.weakley\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...
%backupcmd% "!lastName!!baseExt!" "C:\Users\me\Desktop\Test Source Folder\!baseName!!    baseExt!"



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

解决方案

You need to enable delayed expansion in order to support !VAR! syntax.

Change your first line to:

@echo off & setlocal ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION

这篇关于批处理文件包含另一批那份修改的文件目录到另一个目录的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆