Batch file 如果一个变量被设置为一个变量的名称,那么它能成为那个变量吗?(批)
所有的p(数字)都是路径。例如,%P1%可能是D:\。然后,我让他们说出一个数字。如果他们选择1,我把它和一个P结合起来,得到了P1,第一个变量。我可以将A设置为变量P1吗?这将使代码更加优化。我想试着把所有的东西都放在一个小得可笑的空间里。 下载:Batch file 如果一个变量被设置为一个变量的名称,那么它能成为那个变量吗?(批),batch-file,optimization,Batch File,Optimization,所有的p(数字)都是路径。例如,%P1%可能是D:\。然后,我让他们说出一个数字。如果他们选择1,我把它和一个P结合起来,得到了P1,第一个变量。我可以将A设置为变量P1吗?这将使代码更加优化。我想试着把所有的东西都放在一个小得可笑的空间里。 下载: 简短回答,基于初始代码: 使用delayedexpansion set "a=!P%Pc%!" echo %a% 还是用电话 call set "a=%%P%Pc%%%" echo %a% 不过。要做到这
简短回答,基于初始代码: 使用
delayedexpansion
set "a=!P%Pc%!"
echo %a%
还是用电话
call set "a=%%P%Pc%%%"
echo %a%
不过。要做到这一点,您需要更改配置文件的工作方式。
目前,您的配置有一个主要缺陷,您明确希望忽略某些行号,如果有人删除或添加行号,它将破坏您的代码。您需要使用一些for循环,然后跳过以REM
因此,配置需要如下所示(为了缩短答案,我将其缩小):
现在是代码。部分
@echo off
setlocal enabledelayedexpansion
set pwnum=0
set iwnum=0
set spnum=0
for /f "tokens=1,* delims==" %%i in ('type launcherconfiguration.txt ^| findstr /v "REM "') do (
if "%%i" equ "0" (
echo not configured
goto :eof
)
if "%%~i" == "pwads" (
set /a pwnum+=1
set "PWADlocat!pwnum!=%%~j"
) else (
if "%%~i" == "iwads" (
set /a iwnum+=1
set "IWADlocat!iwnum!=%%~j"
) else (
if "%%~i" == "sp" (
set /a spnum+=1
set "SPlocat!spnum!=%%~j"
)
)
)
)
echo PWADLocation:
for /l %%a in (1,1,%pwnum%) do echo %%a. !PWADLocat%%a!
set /p pw=Choose:
call echo you chose %%PWADlocat!pw!%%
call set "PW=%%PWADlocat!sp!%%"
echo you chose %PW%
pushd "%PW%" rem This will goto the dir
rem do other things
popd
echo IWADLocation:
for /l %%a in (1,1,%iwnum%) do echo %%a. !IWADLocat%%a!
set /p pw=Choose:
call set "IW=%%IWADlocat!sp!%%"
echo you chose %IW%
pushd "%IW%" rem This will goto chosen the dir
rem do other things
popd
echo SPLocation:
for /l %%a in (1,1,%spnum%) do echo %%a. !SPLocat%%a!
set /p sp=Choose:
call set "SP=%%SPlocat!sp!%%"
echo you chose %SP%
pushd "%SP%" rem This will goto the chosen SP dir
rem do other things
popd
让我简单地解释一下。我们为每个数据类型设置一个数字,只要在找到更多匹配的行时增加计数,然后使用另一个for/l
循环再次使用计数
要测试这一点,您需要将此代码复制到新的批处理文件中,将其放置在与配置文件相同的位置并进行测试。您的代码还有很多内容,但我只关注您要求的内容
注意,我仍然希望使用
choice
,但由于您提到的蜂鸣,我在代码中保留了set/p
选项。有没有办法阻止蜂鸣?这是一个警告,表明您选择了错误的键。说明很清楚,有5个选项,不要使用另一个:)但可以设置为不嘟嘟声,但将根据系统而定。欢迎您使用Youset/p
不过,如果您愿意,我只是给了您选择,因为这是一种更好的使用选择的方式。我使用set/p只能得到“ECHO is off”。我将把它发布给公众,这样我就不想发出太大的恼人的声音。只显示echo off表示您设置了错误,编辑您的问题并显示完整的代码,包括如何设置Pn
变量。您没有显示如何设置变量。必须在某个地方设置“P1=something”等。如果希望变量a
包含另一个变量的名称(如P1
),则需要将echo%a%%
更改为调用echo%%%a%%
或echo!%a%代码>何时启用(首选)。如果希望变量a
包含另一个变量的值,请将set“a=p%pc%”更改为call set“a=%%p%pc%%”
或set“a=!p%pc%!
(也带有延迟扩展)…
REM Please set this to 1, or the program will NOT run!
1
REM ------------------------------------------------------------------------------------------
REM Please put paths to the folder your [PWADS] are in. Not the pwads themselves.
REM ------------------------------------------------------------------------------------------
pwads=C:\Some path
pwads=D:\Another
REM ------------------------------------------------------------------------------------------
REM Please put the path to your [IWADS]. Only ten though! Make sure it's the iwads themselves.
REM ------------------------------------------------------------------------------------------
iwads=D:\iwads1
iwads=D:\some path2
REM ------------------------------------------------------------------------------------------
REM Please put the path to your [Source Port] exe's. You must be doing something weird if you have more than ten.
REM ------------------------------------------------------------------------------------------
sp=D:\
sp=E:\
REM ------------------------------------------------------------------------------------------
REM Now, please leave this alone. It's so I know everything works.
REM ------------------------------------------------------------------------------------------
1
@echo off
setlocal enabledelayedexpansion
set pwnum=0
set iwnum=0
set spnum=0
for /f "tokens=1,* delims==" %%i in ('type launcherconfiguration.txt ^| findstr /v "REM "') do (
if "%%i" equ "0" (
echo not configured
goto :eof
)
if "%%~i" == "pwads" (
set /a pwnum+=1
set "PWADlocat!pwnum!=%%~j"
) else (
if "%%~i" == "iwads" (
set /a iwnum+=1
set "IWADlocat!iwnum!=%%~j"
) else (
if "%%~i" == "sp" (
set /a spnum+=1
set "SPlocat!spnum!=%%~j"
)
)
)
)
echo PWADLocation:
for /l %%a in (1,1,%pwnum%) do echo %%a. !PWADLocat%%a!
set /p pw=Choose:
call echo you chose %%PWADlocat!pw!%%
call set "PW=%%PWADlocat!sp!%%"
echo you chose %PW%
pushd "%PW%" rem This will goto the dir
rem do other things
popd
echo IWADLocation:
for /l %%a in (1,1,%iwnum%) do echo %%a. !IWADLocat%%a!
set /p pw=Choose:
call set "IW=%%IWADlocat!sp!%%"
echo you chose %IW%
pushd "%IW%" rem This will goto chosen the dir
rem do other things
popd
echo SPLocation:
for /l %%a in (1,1,%spnum%) do echo %%a. !SPLocat%%a!
set /p sp=Choose:
call set "SP=%%SPlocat!sp!%%"
echo you chose %SP%
pushd "%SP%" rem This will goto the chosen SP dir
rem do other things
popd