Windows 批处理文件以查找和复制最新文件
有一个系统每15分钟生成一个txt文件转储,每次使用不同的文件名。我需要找到包含文本“ASN”的最新文件,并将其复制到一个我可以处理它的文件夹中 到目前为止,我有这个,但我不能让它复制任何文件Windows 批处理文件以查找和复制最新文件,windows,batch-file,search,copy,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%\
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"
源目录是一个映射驱动器,我希望将其复制到本地驱动器。以下内容将复制包含文本
ASN
的文件,忽略文件本身而不是文件名中的大小写:
@echo关闭
设置“智能服务器=Z:\2017年7月”
rem首先列出所有最新文件(递归)
对于('dir”%smart_server%“/S/B/A-D/O:-D')中的/F“delims=|“%%I(
查找/i“ASN”“%%i”>nul
rem成功(errorlevel==0)?
如果不是错误级别1(
设置“NewestFile=%%I”
)
)
如果定义了NewestFile(
rem额外地回显命令due copy不是冗长的
回显副本“%NewestFile%”C:\htdocs\smart\u asn\u downloads\new
复制“%NewestFile%”C:\htdocs\smart\u asn\u downloads\new
)否则(
echo没有找到任何文件!
)
有几件事我已经改变了
1。
设置:我更改了变量
smart\u server
的设置,因为您的设置包含路径中的”
2。
dir命令:使用
/O:D
进行排序时,将显示最早的第一个要反转列表的位置使用:/O:-D
。进一步排除要使用dir显示的目录,因为无法使用find在其中搜索,请使用:/A-D
3。
要查找的管道:似乎要查找的管道不适用于文件名中的空格,因此我将其从命令中删除,并在for循环中执行。如果
find
成功,我将设置NewestFile
变量。我将find
与/I
一起使用,因此它忽略了文本的大小写
如果需要脚本来复制文件名中包含
ASN
,并且以.txt
结尾的文件,则可以使用(这也会忽略此情况):
@echo关闭
设置“智能服务器=Z:\2017年7月”
对于('DIR”%smart\u server%\*ASN*.txt)/S/B/A-D/O:-D')中的/F“delims=|“%%I,请设置新文件=%%I
回显副本“%NewestFile%”C:\htdocs\smart\u asn\u downloads\new
复制“%NewestFile%”C:\htdocs\smart\u asn\u downloads\new
以下内容将复制包含文本的文件ASN
忽略文件本身而不是文件名中的大小写:
@echo关闭
设置“智能服务器=Z:\2017年7月”
rem首先列出所有最新文件(递归)
对于('dir”%smart_server%“/S/B/A-D/O:-D')中的/F“delims=|“%%I(
查找/i“ASN”“%%i”>nul
rem成功(errorlevel==0)?
如果不是错误级别1(
设置“NewestFile=%%I”
)
)
如果定义了NewestFile(
rem额外地回显命令due copy不是冗长的
回显副本“%NewestFile%”C:\htdocs\smart\u asn\u downloads\new
复制“%NewestFile%”C:\htdocs\smart\u asn\u downloads\new
)否则(
echo没有找到任何文件!
)
有几件事我已经改变了
1。
设置:我更改了变量
smart\u server
的设置,因为您的设置包含路径中的”
2。
dir命令:使用
/O:D
进行排序时,将显示最早的第一个要反转列表的位置使用:/O:-D
。进一步排除要使用dir显示的目录,因为无法使用find在其中搜索,请使用:/A-D
3。
要查找的管道:似乎要查找的管道不适用于文件名中的空格,因此我将其从命令中删除,并在for循环中执行。如果
find
成功,我将设置NewestFile
变量。我将find
与/I
一起使用,因此它忽略了文本的大小写
如果需要脚本来复制文件名中包含
ASN
,并且以.txt
结尾的文件,则可以使用(这也会忽略此情况):
@echo关闭
设置“智能服务器=Z:\2017年7月”
对于('DIR”%smart\u server%\*ASN*.txt)/S/B/A-D/O:-D')中的/F“delims=|“%%I,请设置新文件=%%I
回显副本“%NewestFile%”C:\htdocs\smart\u asn\u downloads\new
复制“%NewestFile%”C:\htdocs\smart\u asn\u downloads\new
SET“smart\u server=Z:\JUL2017”
您的实际变量smart\u server
包含路径和撇号。另外设置“NewestFile=%%I”
,因为它可能包含空格。和复制“%newest文件%”..
因为它在更改%smart\u server%
变量的内容后是完全合格的,如上所述,您可以进一步改进DIR
命令,方法是将管道移到FIND
,DIR/B/S/A-D-S-L/OD“%smart\u server%\*ASN*.txt”
。我添加了.txt
扩展名,因为您说的是文本文件,请在必要时进行调整。@Compo:但他想搜索文件的内容,而不是文件名。虽然我不能不同意您的假设,@Andre,我的根据他们的帖子内容而有所不同。他们似乎正在查找文件名中包含ASN的最新文件。我做出这个假设是因为他们的代码试图做到这一点,而更合理的假设是文件名的随机性是问题所在。@Compo:好的,我从另一个角度理解它,因为这句话:我需要找到包含文本“ASN”的最新文件。
。但我认为OP会澄清这一点;-)SET“smart_server=Z:\JUL2017”
您的实际变量smart_server
包含路径和撇号。另外设置“NewestFile=%%I”
,因为它可能包含空格。和复制“%newest文件%”..
由于更改%smart\u server%
变量的内容后完全合格,如上所述,您可以通过将管道移到FIND
,'DIR/B/S/A-D-S-L/OD“%smart\u server%\*ASN*.tx进一步改进DIR
命令