在批处理脚本的变量内部传递for参数

问题描述

def grayToBinary(g,li):
    b = [0]*li
    b[0] = g[0]

    for i in range(1,li):
        b[i] = b[i-1] ^ g[i]

    return b

gray = [0,1,1]
binary = grayToBinary(gray,len(gray))
print("Gray Code =",gray,"Binary =",binary)

在我的批处理文件中不起作用,帮助

我需要的是cmd首先解析“ %% 1”为1、2或其他值;然后解析Gray Code = [0,1] Binary = [0,0]

............................................... ......................

我认为这是一个更大的问题,“变量内部有变量”,因为这也不起作用:

set vid1=asd  
set vid2=fgh
for /L %%1 in (1,2) do (echo %vid%%1%)
pause

解决方法

我应该使用delayedexpansion

setlocal EnableDelayedExpansion

set vid1=asd
set vid2=qwe

for /L %%i in (1,1,3) do (echo !vid%%i!)

pause

也可以不使用delayedexpansion

for /L %%1 in (1,%count%) do (call :yt "%%vid%%1%%" %%1)
pause
exit

:yt
echo video %2
"C:\[path]\youtube-dl.exe" [youtube-dl arguments] %1
echo.
goto:eof

完整的脚本(它膨胀了,因为我正在尝试是否可以做一些事情):

@echo off
set count=0
:beh
set /a count+=1
set /p vid%count%=vid%count%: 
if not defined vid%count% (
set /a count-=1
goto next
) else (
if %count%==1 (echo %count% vid) else (echo %count% vids)
goto beh)
pause

:next
echo %count% videos
pause >nul
choice /m "x?"
IF %ERRORLEVEL% EQU 1 (set x=-x)
echo press enter to run ytdl
pause >nul
echo initiating
echo.
@cd %homepath%/desktop
for /L %%1 in (1,%count%) do (call :yt "%%vid%%1%%" %%1)
pause
exit

:yt
echo video %2
"C:\[path]\youtube-dl.exe" %x% --no-check-certificate -w --console-title -i --no-mark-watched -o ".\%%(title)s.%%(ext)s" --prefer-ffmpeg --ffmpeg-location "C:\[ffmpeg path]" %1
echo.
goto:eof