有一个系统每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"
源目录是一个映射驱动器,我希望将其复制到本地驱动器。
答案 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"