kak*_*aji 3 windows cmd batch-file google-bigquery
echo Give yearmonth "yyyyMM"
setlocal enabledelayedexpansion
SET /p yearmonth=
SET ClientName[0]=abc
SET ClientName[1]=def
SET i = 0
:myLoop
if defined ClientName[%i%] (
call bq query --use_legacy_sql=false "CREATE EXTERNAL TABLE `test.!ClientName[%%i]!.%yearmonth%` OPTIONS (format = 'CSV',skip_leading_rows = 1 uris = ['gs://test/!ClientName[%%i]!/AWS/%yearmonth%/Metrics/data/*.csv'])"
set /a "i+=1"
GOTO :myLoop
)
Run Code Online (Sandbox Code Playgroud)
您好,我正在尝试创建一个批处理,以便可以一次运行多个大查询。上面我尝试编写一个批处理脚本,将命令放入循环中。
我试图通过使用yearmonth 作为用户输入来创建一个表,然后创建数组来创建一个具有不同客户端名称的表。
但我无法在我正在使用的调用查询中打印 if i =0 ClientName[i] = abc !ClientName[%%i]! 打印但它不起作用。
当我执行bat文件时,循环内的调用查询未在GCP控制台中运行。
你能帮我解决这个问题吗
将set变量作为独立的字母字符(例如i. 原因之一就是正如您所经历的那样,您将for元变量%%i与set变量混淆了%i%。
您正在循环中扩展,但还没有,enabledelayedexpansion因此有两种方法,我们稍后会介绍。
setting 变量前后不应有空格,=排除以下内容set /a
因此,方法 1,不带(注意如何在命令循环中delayedexpansion使用 double 变量)。%%call
@echo off
echo Give yearmonth "yyyyMM"
SET /p yearmonth=
SET ClientName[0]=abc
SET ClientName[1]=def
SET num=0
:myLoop
if defined ClientName[%num%] (
call bq query --use_legacy_sql=false "CREATE EXTERNAL TABLE `test.%%ClientName[%num%]%%.%yearmonth%` OPTIONS (format = 'CSV',skip_leading_rows = 1 uris = ['gs://test/%%ClientName[%num%]%%/AWS/%yearmonth%/Metrics/data/*.csv'])"
set /a num+=1
GOTO :myLoop
)
Run Code Online (Sandbox Code Playgroud)
方法2:(更好的方法使用delayedexpansion)
@echo off
setlocal enabledelayedexpansion
echo Give yearmonth "yyyyMM"
SET /p yearmonth=
SET ClientName[0]=abc
SET ClientName[1]=def
SET num=0
:myLoop
if defined ClientName[%num%] (
call bq query --use_legacy_sql=false "CREATE EXTERNAL TABLE `test.!ClientName[%num%]!.%yearmonth%` OPTIONS (format = 'CSV',skip_leading_rows = 1 uris = ['gs://test/!ClientName[%num%]!/AWS/%yearmonth%/Metrics/data/*.csv'])"
set /a num+=1
GOTO :myLoop
)
Run Code Online (Sandbox Code Playgroud)