我想知道如何循环通过文本文件中的每一行使用Windows批处理文件和处理每行文本相继。
当前回答
或者,你可以排除引号中的选项:
FOR /F %%i IN (myfile.txt) DO ECHO %%i
其他回答
在批处理文件中,您必须使用%%而不是%:(键入help for)
for /F "tokens=1,2,3" %%i in (myfile.txt) do call :process %%i %%j %%k
goto thenextstep
:process
set VAR1=%1
set VAR2=%2
set VAR3=%3
COMMANDS TO PROCESS INFORMATION
goto :EOF
它的作用: for命令末尾的“do call:process %%i %%j %%k”将for命令从myfile.txt中获取的信息传递给“process”“子例程”。
当您在批处理程序中使用for命令时,您需要为变量使用双%符号。
下面几行将这些变量从for命令传递给进程“子例程”,并允许您处理这些信息。
set VAR1=%1
set VAR2=%2
set VAR3=%3
我有一些非常高级的使用这个确切的设置,如果需要更多的例子,我愿意分享。当然,根据需要添加您的EOL或Delims。
这是我写的一个bat文件来执行文件夹中的所有SQL脚本:
REM ******************************************************************
REM Runs all *.sql scripts sorted by filename in the current folder.
REM To use integrated auth change -U <user> -P <password> to -E
REM ******************************************************************
dir /B /O:n *.sql > RunSqlScripts.tmp
for /F %%A in (RunSqlScripts.tmp) do osql -S (local) -d DEFAULT_DATABASE_NAME -U USERNAME_GOES_HERE -P PASSWORD_GOES_HERE -i %%A
del RunSqlScripts.tmp
我需要把整条线作为一个整体来处理。以下是我发现有效的方法。
for /F "tokens=*" %%A in (myfile.txt) do [process] %%A
带有星号(*)的tokens关键字将提取整行的所有文本。如果你不加星号,它只会拉出一行中的第一个单词。我想这和空格有关。
在TechNet上的命令
如果文件路径中有空格,则需要使用usebackq。为例。
for /F "usebackq tokens=*" %%A in ("my file.txt") do [process] %%A
改进第一个“FOR /F..”的答案: 我要做的是调用执行MyList.txt中列出的每个脚本,所以它对我有用:
for /F "tokens=*" %A in (MyList.txt) do CALL %A ARG1
——或者,如果你想在多行上做:
for /F "tokens=*" %A in (MuList.txt) do (
ECHO Processing %A....
CALL %A ARG1
)
编辑:上面给出的例子是从命令提示符执行for循环;在批处理脚本中,需要添加一个额外的%,如下所示:
---START of MyScript.bat---
@echo off
for /F "tokens=*" %%A in ( MyList.TXT) do (
ECHO Processing %%A....
CALL %%A ARG1
)
@echo on
;---END of MyScript.bat---
@ kraus先生的回答很有启发性。另外,如果您想加载与批处理文件位于同一目录中的文件,请在文件名前加上%~dp0。这里有一个例子:
cd /d %~dp0
for /F "tokens=*" %%A in (myfile.txt) do [process] %%A
注意:如果你的文件名或目录(例如上面例子中的myfile.txt)有一个空格(例如:'my file.txt'或'c:\程序文件'),使用:
for /F "tokens=*" %%A in ('type "my file.txt"') do [process] %%A
,使用type关键字调用type程序,该程序显示文本文件的内容。如果您不想承受调用type命令的开销,您应该将目录更改为文本文件的目录。注意,带空格的文件名仍然需要type。
我希望这能帮助到一些人!
推荐文章
- 在Windows批处理脚本中格式化日期和时间
- 映射一个网络驱动器供服务使用
- 如何在windows中使用命令提示符(cmd)列出文件。我试过在Linux中使用“ls”,但它显示一个错误?
- Windows上最好的免费c++分析器是什么?
- 如何在Windows上运行多个Python版本
- 运行计划任务的最佳方式
- Windows上Git文件的权限
- 如何同时安装Python 2。3. Python。Windows下的x
- BAT文件执行后保持CMD打开
- 可能改变安卓虚拟设备保存的地方?
- 如何检查DLL依赖关系?
- Android-Facebook应用程序的键散列
- 如何在PowerShell中输出一些东西
- 如何在命令提示符中使用空格?
- 在Python中如何在Linux和Windows中使用“/”(目录分隔符)?