如何使用for循环遍历目录中的每个文件?
我如何判断某个条目是一个目录还是一个文件?
如何使用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将只获得文件的第一行。
其他回答
我很难让jop的答案与绝对路径一起工作,直到我发现这个参考:https://ss64.com/nt/for_r.html
下面的示例循环遍历一个由绝对路径给出的目录中的所有文件。
For /R C:\absoulte\path\ %%G IN (*.*) do (
Echo %%G
)
下面的代码在当前目录中创建一个名为“AllFilesInCurrentDirectorylist.txt”的文件,其中包含当前目录中所有文件(仅为文件)的列表。看看吧
dir /b /a-d > AllFilesInCurrentDirectorylist.txt
这将递归地列出当前目录及其子目录中的所有文件(仅是文件):
for /r %i in (*) do echo %i
此外,如果在批处理文件中运行该命令,则需要将%符号加倍。
for /r %%i in (*) do echo %%i
(感谢@agnul)
试试这个测试文件是否是目录:
FOR /F "delims=" %I IN ('DIR /B /AD "filename" 2^>^&1 ^>NUL') DO IF "%I" == "File Not Found" ECHO Not a directory
这只会告诉你一个文件是否不是一个目录,如果文件不存在,这也会是真的,所以如果需要,一定要先检查它。插入符号(^)用于转义重定向符号,文件列表输出被重定向到NUL以防止它被显示,而DIR列表的错误输出被重定向到输出,因此您可以测试DIR的消息“file Not Found”。
%1是传入的第一个参数,不能在迭代器中使用。
试试这个:
@echo off
for %%i in (*.*) do echo %%i