使用FOR命令列出目录中的所有文件

时间:2015-09-25 20:08:33

标签: windows batch-file for-loop cmd

我在cp1_26_09_2015.txt的4个不同子文件夹中有4个文件,其名称类似于cp1_22_02_2015cp1_28_09_2015D:\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%这不起作用,报告语法错误。

2 个答案:

答案 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文件并从命令行运行它们,请评论此答案。

相关问题