批处理脚本将输入动态传递给.exe并递归运行

问题描述 投票:0回答:1

我正在尝试运行一个批处理脚本,它将在其中从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

我是批处理脚本的新手,如果您可以对在批处理脚本中实现此方法有一些想法,那将非常有帮助。如果需要分享任何详细信息,请告诉我。.

sql-server powershell tsql batch-file exe
1个回答
0
投票

可以通过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]!
)
© www.soinside.com 2019 - 2024. All rights reserved.