我在cp1_26_09_2015.txt
的4个不同子文件夹中有4个文件,其名称类似于cp1_22_02_2015
,cp1_28_09_2015
,D:\drive
等,但日期格式相同。
当我使用FOR
命令列出目录和子目录中的所有文件时,我想逐个搜索文件。
然后它在4个不同的文件夹中列出了这个文本文件的4个名称,但我希望逐个提取路径,以便我可以在每个文件上逐个执行操作。所以到现在为止我构建了这个:
SETLOCAL ENABLEDELAYEDEXPANSION
setlocal
SET /A MAXJ=1
SET /A J=1
set _T1=%date:.=%
set _year=%_T1:~-4,4%
set _month=%_T1:~-10,2%
set _day=%_T1:~-7,2%
cp1_26_09_2015.txt
set _prefix=cp1
PAUSE
FOR /F "usebackq tokens=*" %%i IN (`DIR /S /B D:\cp1*.txt`) DO ( IF NOT "%%~nxi"==**%_prefix%_%_year%_%_month%_%_day%.txt** (
SET XCOUNT_!J!=%%~i
SET MAXJ=!J!
SET /A J+=1
)
)
SET XCOUNT
SET /A J-=1
@echo COUNT OF FILES IS : %J%
PAUSE
现在问题是当我尝试在搜索中删除今天的日期文件时,文件名为cp1_28_09_2015.txt
,其中扩展名中的日期变量在%_month%
中提供,{{ 1}}和%_year%
这不起作用,报告语法错误。
答案 0 :(得分:1)
创建一个BAT文件并尝试这样:
@echo off
FOR /R "D:\" %%i in (*_26_09_2015.txt) do call:test %%i
echo Done !
exit/b
:test
echo working on : %1
echo Do what you want with %1
新编辑:
试试这个:
@echo off
set "_year=%date:~6,4%"
set "_month=%date:~3,2%"
set "_day=%date:~0,2%"
set "_prefix=cp1"
For /f "tokens=*" %%i IN ('DIR /S /B cp1*.txt') do (
If /i not "%%~nxi"=="%_prefix%_%_day%_%_month%_%_year%.txt" (
call:next "%%~nxi")
)
exit/b
:next
echo make something with : %1
echo who don't have the today date
pause
答案 1 :(得分:0)
如果您希望它搜索单个文件,请创建一个文件listtest.cmd,如下所示:
@echo off
set testparams=%1
echo Listing files with name %1.
echo ====
FOR /R "D:\" %%i in (*_26_09_2015.txt) do call :filetest %%i
echo ====
echo Done.
exit /b
:filetest
if %1 == %testparams% echo %1
然后使用以下语法从命令行运行它;
listtest <filesearch>
其中filesearch是您希望它找到的文件。
如果您不知道如何制作CMD文件并从命令行运行它们,请评论此答案。