用于查找和复制最新文件的批处理文件

时间:2017-07-17 10:04:15

标签: windows batch-file search copy

有一个系统每15分钟生成一次txt文件转储,每次都有不同的文件名。我需要找到包含文字' ASN'的最新文件。并将其复制到我可以处理的文件夹中。

到目前为止,我有这个,但我无法复制任何文件。

SET smart_server='Z:\JUL2017'

FOR /F "delims=|" %%I IN ('DIR "%smart_server%" /S /B /O:D ^| find /i "ASN" ') DO SET NewestFile=%%I
copy "%smart_server%\%NewestFile%" "C:\htdocs\smart_asn_downloads\new" 

源目录是一个映射驱动器,我希望将其复制到本地驱动器。

1 个答案:

答案 0 :(得分:0)

以下内容将复制包含文本ASN的文件,忽略文件中的大小写而不是文件名:

@echo off
set "smart_server=Z:\JUL2017"

rem list all files (recursive) latest first
for /F "delims=|" %%I in ('dir "%smart_server%" /S /B /A-D /O:-D') do (
   find /i "ASN" "%%I" > nul
   rem success (errorlevel == 0)?
   if not errorlevel 1 (
      set "NewestFile=%%I"
   )
)
if defined NewestFile (
   rem addionally echoing the command due copy is not verbose
   echo copy "%NewestFile%" "C:\htdocs\smart_asn_downloads\new" 
   copy "%NewestFile%" "C:\htdocs\smart_asn_downloads\new" 
) else (
   echo Found no file!
)

我改变了几件事。

<强> 1。 设置:
我更改了变量smart_server的设置,因为您的集合在路径中包含'

<强> 2。 dir命令:
使用/O:D进行排序会显示最早用于反转列表使用的第一个:/O:-D。进一步排除要用dir显示的目录,因为您无法使用find进行搜索,请使用:/A-D

第3。 管道找:
似乎找到的管道不能用于文件名中的空格,因此我将其从命令中删除并在for循环中执行。如果find成功,我会设置NewestFile变量。我将find/I一起使用,因此忽略了文本的大小写。

如果您需要脚本在文件名中复制包含ASN的文件,并以.txt结尾,则可以使用(这也忽略了这种情况):

@echo off

set "smart_server=Z:\JUL2017"
for /F "delims=|" %%I IN ('DIR "%smart_server%\*ASN*.txt" /S /B /A-D /O:-D') DO SET NewestFile=%%I
echo copy "%NewestFile%" "C:\htdocs\smart_asn_downloads\new" 
copy "%NewestFile%" "C:\htdocs\smart_asn_downloads\new"