我需要創建一個整數陣列,該陣列在一個限制數處停止,然后在另一個固定值之后繼續。類似于 [1 2 3 4 5 10 11 12 13 14 15 16] 的東西,其中 5 是限制數,而 10 是重新啟動的位置。
你能做類似的事情set arr = [1:%lim%, 10:%max%]嗎?
uj5u.com熱心網友回復:
@ECHO OFF
SETLOCAL
CALL :buildlist mylist 1 5 10 16
ECHO list is %mylist%
PAUSE
GOTO :eof
:: Produce a list of integers
:: %1 is listname
:: %2 is start value
:: %3 is end-value for range
:: %4 is restart-value
:: %5 is end-value
:buildlist
SET "%1="
FOR /L %%v IN (%2,1,%5) DO (
IF %%v leq %3 CALL SET "%1=%%%1%% %%v"
IF %%v geq %4 CALL SET "%1=%%%1%% %%v"
)
CALL SET "%1=%%%1:~1%%"
GOTO :eof
Batch 確實沒有陣列,但是稍微有點想象力就可以模擬一個。
上面的例程為規范生成一個值串列,準備好由for陳述句處理。
盡管可以使用delayedexpansion,但可以避免使用該工具。通過CALLing 一個set命令,該命令在執行前被決議以便解碼象形文字,其中%1變數名“var”
SET "%1=%%%1%% %%v"
被處理為:
SET "var=%var% %%v"
就像%%一個逃脫的-%
相似地,
SET "%1=%%%1:~1%%"
被執行為
SET "var=%var:~1%"
洗掉第一個字符,這將是一個空格。
uj5u.com熱心網友回復:
Batch 沒有OR運算子,因此您必須使用兩個單獨的if陳述句 - 一個用于第一組數字,一個用于第二組數字。但是,您可以將兩者放在同一個for回圈中:
@echo off
setlocal enabledelayedexpansion
set "lim=5"
set "max=10"
REM Setting counter to -1 because we're going to increment the counter and then
REM use it, and arrays famously start at zero.
set "counter=-1"
for /L %%A in (1,1,16) do (
if %%A LEQ %lim% (
set /a counter =1
set "array[!counter!]=%%A"
)
if %%A GEQ %max% (
set /a counter =1
set "array[!counter!]=%%A"
)
)
REM Display the contents of the array just to prove it worked.
REM Alphabetic order is used, so array[10] and array[11] are going to print before array[1]
set array[
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/420396.html
標籤:
上一篇:如何使ec2實體埠安全
