我正在尝试运行一个批处理脚本,它将在其中从SQL Server表结果集中获取值,并将其作为循环中的输入传递给批处理脚本中的.EXE,然后递归运行。
Ex:
select Name from sys.tables
declare @name int
set @name = count(Name) from sys.tables
DECLARE @Counter INT
SET @Counter=1
WHILE ( @Counter <= @name)
BEGIN
C:\Users> .\Test.exe /Input_From_Sql_result_as_argument Name
SET @Counter = @Counter + 1
END
我是批处理脚本的新手,如果您可以对在批处理脚本中实现此方法有一些想法,那将非常有帮助。如果需要分享任何详细信息,请告诉我。.
可以通过Setlocal EnableDelayedExpansion
和基本的For /F
循环将每一行的内容设置为索引变量,就像数组一样
根据文件的内容/结构,您可能不需要使用数组方法-只需使用For / F循环变量(在此示例中为%% G)执行操作即可。
同样,取决于内容,您可能希望修改for循环中的选项以检索特定令牌。 (在cmd.exe中键入For /F
以获取完整语法-或搜索并阅读SO上与处理文件内容有关的众多其他问题)
一旦建立了数组,就可以使用For /L
循环遍历每一行,并使用每一行的值插入要执行的命令。
[如果通过递归运行,则意味着要在文件夹和子文件夹中的每个文件上运行它(在涉及批处理的情况下,递归术语的典型含义是,将For /F
循环嵌套在For /R
循环内,并交换%inputfile%
在[/ F]循环中使用%%A
,如下所示:
CD(更改目录)/ PUSHD到要在其上迭代的父文件夹,或者//确保从父文件夹运行该批处理
For /R %%A In (*.YOURextension) Do (For /F "delims=" %%G in (%%A) Do (commands))
``
@ECHO OFF
Setlocal EnableDelayedExpansion
Set index=0
Set "inputFile=Your File Path.extension"
For /f "delims=" %%G in (%inputfile%) DO (
REM Perform your action on the content here using %%G
ECHO(%%G
REM Optional - assign value of each line to indexed variable
Set /a "index+=1"
Set "Line[!index!]=%%G"
)
For /L %%I in (1,1,!index!) DO (
REM - Alternate - Perfom your action on the content here using !Line[%%I]!
ECHO(!Line[%%I]!
)