这有点令人费解,但我会尽我所能解释。我需要提取文件名中和最新文件名之后具有相同日期的2个文件之间的所有文件名。到目前为止,这是我非常稀疏的代码,用于提取第一个文件:
@echo off
setlocal
pushd \\server1.com\developer\inetpub\Ftproot\XMLs
echo.
for /f "tokens=2 delims=_" %%a in ('dir /b /o-d ABC*.xml') do (
for /f %%b in ('dir /b /o-d ABC*%%a*.xml') do (echo %%~b - %%~tb &&goto:out)
)
:out
popd
这只是在目录中找到最新的ABC xml文件。现在我需要找到第二个最新的并列出第二个最新的ABC xmls和最新的ABC xml文件之后的所有文件之间的所有文件。
我无法为此做一个dir
列表,因为即使是一小部分也会有数百个文件。这是我期望返回的一小部分。
08/20/2015 05:50 PM 8,829 BC6009490001_ACCTV21_20150820_CHG_367_107431247A.xml
08/20/2015 05:50 PM 11,552 BC6009490001_BALMIS_20150820_CHG_367_107432647B.xml
08/20/2015 05:49 PM 679 ABC_20150820_107481745D.xml
08/20/2015 05:48 PM 7,647 ID1779750001_BALMIS_20150820_NAC_5_1074336956.xml
08/20/2015 05:48 PM 7,650 ID1779740001_BALMIS_20150820_NAC_5_107447244U.xml
08/20/2015 05:48 PM 7,604 ID1778730001_BALMIS_20150820_NAC_5_107434944I.xml
08/20/2015 05:48 PM 7,786 ID1808430001_BALMIS_20150820_NAC_2_1074206446.xml
08/20/2015 05:43 PM 8,911 SB1522960001_ACCTV21_20150820_EXT_3_107249691J.xml
08/20/2015 05:43 PM 6,141 SB1522960001_BALMIS_20150820_EXT_3_107400191K.xml
08/20/2015 05:43 PM 623 ABC_20150820_1074331234.xml
所以,我可以轻松找到最新的ABC * .xml文件,但我希望得到5:43以及它上面的所有内容。必须从文件名中提取搜索日期,因为有时它与日期dir
返回不同。
答案 0 :(得分:0)
所以,起初我想出了这个:
@echo off
setlocal enabledelayedexpansion
set "found=0"
pushd \\server1\developer\inetpub\Ftproot\XMLs
echo.
for /f "tokens=1,2 delims=[]" %%a in (
'dir /b /o:-d *.xml^|find /i /n /v "^"'
) do (
set "f3=%%b"
IF "!f3:~0,3!" EQU "ABC" set /a "found+=1"
IF "!found!" EQU "2" (
Echo %%b
Echo %%a Files Total
Goto :out
) ELSE (
echo %%b
)
)
:out
popd
它运作得很好,但速度很慢。我记得在一个for循环中听到dir的问题,它必须在它开始之前迭代整个目录并且需要32,000个文件,这需要一段时间。所以,我在dostips论坛上发布了它,在foxidrive的帮助下,我想出了这个:
@echo off
dir /b /o:-d "\\server1\developer\inetpub\Ftproot\XMLs\*.xml" >"%temp%\filterABC.tmp"
set "found="
set "files="
setlocal enabledelayedexpansion
(
for /f "usebackq delims=" %%a in ("%temp%\filterABC.tmp") do (
set "f3=%%a"
echo %%a
set /a files+=1
IF /i "!f3:~0,3!" EQU "ABC" IF defined found goto :out
IF /i "!f3:~0,3!" EQU "ABC" set "found=1"
)
)>"%temp%\filterABC2.tmp"
:out
echo located !files! files in total
notepad "%temp%\filterABC2.tmp"
del "%temp%\filterABC.tmp"
现在它工作得很好。