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
Batch file 如何根据使用批处理文件修改的日期复制多个文件?_Batch File - Fatal编程技术网

Batch file 如何根据使用批处理文件修改的日期复制多个文件?

Batch file 如何根据使用批处理文件修改的日期复制多个文件?,batch-file,Batch File,我想根据从其他文件夹修改的日期执行“文件复制”命令 我有这样的批处理文件,但这只能复制一个文件 @echo off set folder1=D:\FTP-NSQM\2G_VOLUME\2017 set folder2=D:\FTP-NSQM\newday\2gvolume for /f "tokens=*" %%a in ('dir /b /a-d /o-d "%folder1%\*.csv"') do copy "%folder1%\%%~a" "%folder2%" & goto n

我想根据从其他文件夹修改的日期执行“文件复制”命令

我有这样的批处理文件,但这只能复制一个文件

@echo off
set folder1=D:\FTP-NSQM\2G_VOLUME\2017
set folder2=D:\FTP-NSQM\newday\2gvolume
for /f "tokens=*" %%a in ('dir /b /a-d /o-d "%folder1%\*.csv"') do copy "%folder1%\%%~a" "%folder2%" & goto next
:next
echo Carrying on with rest of batch
pause
如何在最后修改时复制多个文件

例如,我有这样的文件。我要将文件a.csv、b.csv和c.csv从文件夹1复制到文件夹2 如果可能,我想删除文件夹2上以前的数据(d.csv、e.csv和f.csv)

所以-首先清除folder2,然后将当前目录切换到folder1

lastdate
设置为以相反日期顺序找到的第一个.csv的日期/时间字符串,并删除时间部分

再次运行目录,查看在
lastdate
中找到的日期是否与文件的日期匹配。如果是这样,
errorlevel
将设置为0,否则设置为非零

if errorlevel
测试解释
errorlevel
的当前值,如果
errorlevel
的值为指定值或更大,则计算结果为
true
,否则为false,因此如果
errorlevel
0
(日期匹配
lastdate
),则需要复制文件由于文件是按日期顺序列出的,找到第一个不匹配的文件将意味着剩余的文件也将在日期上不匹配,因此我们可以退出
for
循环,返回到
done
pop
原始目录。

这应该可以工作->

@echo off
set folder1=D:\FTP-NSQM\2G_VOLUME\2017
set folder2=D:\FTP-NSQM\newday\2gvolume
set dateFlag=""
cd %folder2%
for /f %%a in ('dir /b /od') do @set dateFlag=%%~ta
set dateFlag=%dateFlag:~0,10%
cd ..
del %folder2%
mkdir %folder2%
echo latest date= %dateFlag%
cd %folder1%
FORFILES /D +%dateFlag% /C "cmd /c copy @file %folder2/"

标准是什么。我可以找出修改的日期。但是,我必须复制那些修改日期与特定日期交叉的文件吗?我想复制以“do”开头的行中的“last date modified:”)您需要一个冒号(:next)您发布的代码无法工作,因为存在语法错误。当您要复制第二个目录中当前不存在的文件时,是否可以再次说明此问题?如果第一个目录中的文件日期与第二个目录中的文件日期不同,是否还要复制第二个目录中确实存在的第一个目录中的文件?@Marichyasana:不,除了在
goto:eof
的特定情况下,您不需要在
goto
中使用冒号。事实上,我建议不要在
goto
中使用冒号,除了
goto:eof
非常感谢你,它的工作:),但是你忘了在
上的双引号('dir/b/a-d/o-d*.csv')
be
('dir/b/a-d/o-d*.csv')
Hai@Magoo,如何从文件夹2将lastdate设置为最后日期?我已经尝试过
('dir/b/a-d/o-d”%folder2%\*.csv“)设置“lastdate=%%~ta”
,这不起作用(没有人复制)。我不明白为什么您需要
folder2
中的最后日期,因为它与您的问题无关。但是,您需要
pushd”%folder2%"
然后执行
dir
命令,设置
lastdate2
,然后退出到
:next2
并从
lastdate2
中获取日期,方法与从
folder1
中设置
lastdate
相同。然后
ppd
将返回到原始目录。遗憾的是,使用
%%t?
将导致失败从
%%中的文件名中签名时间戳?
但从当前目录(如果存在)中签名感谢@Trishant Pahwa,但这对我不起作用:)我在
/Q上有错误,没有被识别为内部或外部命令、可操作程序或btch文件。
无效开关-“*”
现在试试看吧??
:: remove all .csv files from destination
del "%folder2%\*.csv"
pushd "%folder1%"
:: date lastdate to the latest date/time of a file in folder1
for /f "tokens=*" %%a in ('dir /b /a-d /o-d "*.csv"') do set "lastdate=%%~ta"& goto next
:next
:: grab first 8 characters (may need to be 10, depending on your date/time format)
:: - get the date part only
set "lastdate=%lastdate:~0,8%"
for /f "tokens=*" %%a in ('dir /b /a-d /o-d "*.csv"') do echo "%%~ta" | find "%lastdate%" >nul & if errorlevel 1 (
 goto done
 ) else (copy "%%~a" "%folder2%")
)
:done
popd
@echo off
set folder1=D:\FTP-NSQM\2G_VOLUME\2017
set folder2=D:\FTP-NSQM\newday\2gvolume
set dateFlag=""
cd %folder2%
for /f %%a in ('dir /b /od') do @set dateFlag=%%~ta
set dateFlag=%dateFlag:~0,10%
cd ..
del %folder2%
mkdir %folder2%
echo latest date= %dateFlag%
cd %folder1%
FORFILES /D +%dateFlag% /C "cmd /c copy @file %folder2/"