【问题标题】:Using FOR command to list all the files in directory使用 FOR 命令列出目录中的所有文件
【发布时间】:2015-09-25 20:08:33
【问题描述】:

我在 D:\drive 的 4 个不同子文件夹中有 4 个文件,名称为 cp1_26_09_2015.txtcp1_22_02_2015cp1_28_09_2015 等,日期格式相同。

当我使用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%%_year%%_day% 中提供,这不是正在运行,报告语法错误。

【问题讨论】:

  • 那么问题出在哪里?代替回声,做你的操作。
  • 我想一一获取路径
  • 现在我得到了
  • 是的,您正在逐一获取路径。
  • 不,不是。它正在通过回声将它们打印到屏幕上,但它正在单独打印每条路径。这就是for... 的全部意义所在

标签: windows batch-file for-loop cmd


【解决方案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

【讨论】:

  • 请从代码中删除 cp1_26_09_2015.txt 并从我编辑此问题并提供代码的代码 sn-p 中忽略 **
  • @SachaDee 的输出仍然不如预期
【解决方案2】:

如果您希望它搜索单个文件,请像这样创建一个文件 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 文件并从命令行运行它们,请评论此答案。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-16
    • 2011-06-13
    • 2017-10-28
    相关资源
    最近更新 更多