【问题标题】:Delete and replace variables删除和替换变量
【发布时间】:2014-06-08 07:23:35
【问题描述】:
假设我们有 4 个变量,例如:
set var1=Hello
set var2=Some text
set var3=Some more text
set var4=Even some more text
然后提示用户删除其中一个,本例(1-4)如:
set /p delete_one="Delete one:"
如果用户写了例如“2”,那么新变量将是:
var1=Hello
var2=Some more text
var3=Even some more text
我将如何进行这项工作?
【问题讨论】:
标签:
batch-file
cmd
command-prompt
【解决方案1】:
@echo off
setlocal EnableDelayedExpansion
set var1=Hello
set var2=Some text
set var3=Some more text
set var4=Even some more text
SET VAR
set /p delete_one="Delete one: "
set "Xvar="
for /F "tokens=1,2 delims==" %%a in ('set var') do (
if defined Xvar (
set "!Xvar!=%%b"
set "Xvar=%%a"
) else if "%%a" equ "var%delete_one%" (
set "Xvar=%%a"
)
)
set "%Xvar%="
SET VAR
您必须检查给定数量的要删除的变量是否存在。请注意,变量按字母顺序排序,因此如果存在超过 9 个变量,并且您希望保留其“自然顺序”,则小于 10 的变量必须具有左零:var01=Hello,并且您必须将此左零值赋予删除那个变量。
【解决方案2】:
@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
set var1=Hello
set var2=Some text
set var3=Some more text
set var4=Even some more text
FOR /L %%a IN (5,1,12) DO SET var%%a=MORE text %%a
SET VAR
set /p delete_one="Delete one: "
SET /a get=1
SET /a put=1
:loop
IF %get%==%delete_one% SET /a get+=1
IF %get%==%put% GOTO next
SET var%put%=!var%get%!
:next
SET /a put+=1
SET /a get+=1
IF DEFINED var%get% GOTO loop
SET "var%put%="
SET VAR
GOTO :EOF
...免疫 9 限制。