如何使用for循环遍历目录中的每个文件?

我如何判断某个条目是一个目录还是一个文件?


当前回答

要遍历每个文件,可以使用for循环:

(目录\路径\*)do (something_here)

在我的例子中,我还需要文件内容、名称等。

这导致了一些问题,我认为我的用例可能会有所帮助。下面是一个循环,它从目录中的每个“。txt”文件中读取信息,并允许你对它做一些事情(例如setx)。

@ECHO OFF
setlocal enabledelayedexpansion
for %%f in (directory\path\*.txt) do (
  set /p val=<%%f
  echo "fullname: %%f"
  echo "name: %%~nf"
  echo "contents: !val!"
)

*限制:val<=%%f将只获得文件的第一行。

其他回答

试试这个:

::Example directory
set SetupDir=C:\Users

::Loop in the folder with "/r" to search in recursive folders, %%f being a loop ::variable 
for /r "%SetupDir%" %%f in (*.msi *.exe) do set /a counter+=1

echo there are %counter% files in your folder

它会计算目录(以及子目录)中的。msi和。exe文件。因此,作为可执行文件的文件夹和文件之间也有区别。

如果需要过滤循环中的其他文件,只需添加一个扩展名(.pptx .docx ..)

for %1 in (*.*) do echo %1

在cmd中尝试“HELP FOR”以获得完整的指南

这是XP命令的指南。http://www.ss64.com/nt/

下面的代码在当前目录中创建一个名为“AllFilesInCurrentDirectorylist.txt”的文件,其中包含当前目录中所有文件(仅为文件)的列表。看看吧

dir /b /a-d > AllFilesInCurrentDirectorylist.txt

从命令行运行FOR和从批处理文件运行FOR之间有细微的区别。在批处理文件中,您需要在每个变量引用前放置两个%字符。

从命令行:

FOR %i IN (*) DO ECHO %i

从批处理文件:

FOR %%i IN (*) DO ECHO %%i

它也可以使用forfiles命令:

forfiles /s 

还要检查它是否是一个目录

forfiles /p c:\ /s /m *.* /c "cmd /c if @isdir==true echo @file is a directory"