Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/15.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
Windows 使用批处理脚本自动将最新文件复制到文件夹_Windows_Cmd_Batch File - Fatal编程技术网

Windows 使用批处理脚本自动将最新文件复制到文件夹

Windows 使用批处理脚本自动将最新文件复制到文件夹,windows,cmd,batch-file,Windows,Cmd,Batch File,我想在尝试创建脚本时寻求帮助,该脚本将自动检查上次修改的文件并将其传输到目标 我所拥有的是: @Echo Off Set _Delay=1 for /f "tokens=1,2,3 delims==" %%a in (config.ini) do ( if %%a==source set _Monitor=%%b if %%a==destination set _Dest=%%b if %%a==timer set _Timer=%%b ) Set _Base=%temp%\BaselineSt

我想在尝试创建脚本时寻求帮助,该脚本将自动检查上次修改的文件并将其传输到目标

我所拥有的是:

@Echo Off
Set _Delay=1
for /f "tokens=1,2,3 delims==" %%a in (config.ini) do (
if %%a==source set _Monitor=%%b
if %%a==destination set _Dest=%%b
if %%a==timer set _Timer=%%b
)
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
Goto :_Xfer
:_StartMon
@echo off
SET R1=Start /w Sync1.vbs
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
::
for /l %%a in (%_Timer%,-1,0) do (
@Echo::::::::::::::::::::::::::::::::::::::::::::::
@Echo:: SEC Auto Transfer ::
@Echo:: Aizal 16 June 2012 ::
@Echo::::::::::::::::::::::::::::::::::::::::::::::
@Echo This script will scan SEC Data Folder for
@Echo new files every 30 minutes and will copy
@Echo it to the Server. Make sure you set correct
@Echo folder before using this script.
ECHO.
ECHO Currently recording:
FOR /F %%a in ('xcopy "%_Monitor%\*.SEC" "%_Dest%" /L /Y') DO (
IF NOT EXIST "%_Dest%.\%%~nxa" ECHO %%~nxa
)
ECHO Refreshing...
ECHO Please wait %%a seconds...
%R1%
cls
)
::
:_Xfer
FOR /F %%a in ('xcopy "%_Monitor%\*.SEC" "%_Dest%" /L /Y') DO (
IF NOT EXIST "%_Dest%.\%%~nxa" xcopy "%%a" "%_Dest%" /Y
)
::
Echo.Change Detected
ECHO.
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
现在,如果您注意到脚本将比较源文件夹的内容和目标文件夹的内容,如果目标文件夹中还没有文件,脚本将从源文件夹复制文件。我想知道是否有人可以帮我弄清楚如何使脚本检查源文件夹中最后修改的文件,并仅将其复制到目标,如果所述文件当前正在使用/正在写入,则脚本将等待它完成,然后再尝试复制它

此外,现在我必须编辑source.ini文件以指定要监视的文件夹,每次我必须更改子文件夹路径以监视更改时,是否有方法监视父文件夹中的任何新文件并将该文件带到目标

我在网上找到了这个脚本,但希望检查文件不是基于日期,而是基于时间

::Copy Files Made Or Modified Today
@echo off
setlocal
set source= <source directory>
set dest= <destination directory>
pushd "%source%"
set t=%date:~4%
::for /f %%a in ('dir /b /a-d /o-d') do call :PROCESS "%%a"
goto :eof
popd
:PROCESS
for /f %%j in ('echo %~t1') do set d=%%j
if "%d%"=="%t%" copy %1 "%dest%"
goto :eof
::复制今天制作或修改的文件
@回音
setlocal
设置源=
设置目标=
pushd“%source%”
设置t=%date:~4%
::对于('dir/b/a-d/o-d')中的/f%%a,请调用:处理“%%a”
后藤:eof
邻苯二胺
:进程
对于('echo%%t1')中的/f%%j,设置d=%%j
如果“%d%”==“t%”复制%1“%dest%”
后藤:eof
希望从这里找到解决办法


非常感谢

通过此功能,您将获得最后修改的文件:

for /f %%A in ('dir /b /tw /o-d not-mandatory-file-mask') do (
   set last_file=%%A
   goto :endloop
)
:endloop
如果可能的话,你可以用它来复制文件。如果没有,它将反复尝试:

:tryagain
set /a errorlevel=0
copy some_dir\%last_file% %destination%
if %errorlevel% NEQ 0 (
   sleep 10
   goto :tryagain
) else (
   goto :end
)
:end

被认为是机器人疗法?它支持从命令行进行监视、镜像和重试我知道xcopy已经过时了,但我确信它仍然可以做到?没有?你可以从xp资源库下载xp版本哦,是的。我说得太快了。因为是XP,所以我有robocopy。不过,我还不知道怎么做。