CMD:管道ECHO来设置/扩展变量中的变量

时间:2016-02-21 04:10:51

标签: batch-file command-line cmd command-prompt piping

%x:~12,3%从x变量的第12个字符开始返回3个字符。 我一直在努力实现的是使用变量而不是123。 我们说y=12z=3。 然后,您无法使用%x:~%y%,%z%%,因为CMD会认为%x:~%是变量。

你可以做的是set var=%%x:~%y%,%z%%%。这将扩展内部变量yz,但不会扩展x,因此var的值为%x:~12,3%。 现在剩下的任务是最终扩展%x:~12,3%。我一直试图在echo开头追加var=echo %x:~12,3%,以便%var%。 如果在命令行或批处理文件中,您现在使用echo %x:~12,3%,则应执行echo命令,并展开后续表达式,但它不会,而%x:~12,3%只会导致%x:~12,3%打印到屏幕上,未展开。

我在想,如果你将var设置为ECHO,那么就回应它 并将输出传递到另一个SET命令或ECHO命令,表达式将被扩展,但似乎SEThtml,body {height:100%; margin:0;} .list { width: 200px; height:100%; } .list ul { height:100%; margin: 0; padding:0; list-style: none; } .list ul li { border-bottom: 1px solid #000; /* Scrollbar appears with this*/ box-sizing:border-box; height:20%; } .list ul li a { text-decoration: none; display: block; padding: 1em 1em 1em 0.2em; color:#000; } .list ul li a:after { content:"»"; float:right; }不接受通过管道输入的数据什么?

我该如何做到这一点?

2 个答案:

答案 0 :(得分:1)

您需要启用延迟扩展。

@echo off
setlocal enabledelayedexpansion

set string=1234567890abcdef
set substring_start=12
set substring_length=3

set substring=!string:~%substring_start%, %substring_length%!
set command=echo !substring!

!command!
pause

答案 1 :(得分:1)

@ECHO OFF
SETLOCAL

SET "x=abcdefghijklmmopqrstuvwxyz"

SET /a start=12
SET /a length=3

CALL SET "var=%%x:~%start%,%length%%%"
ECHO var=%var%
CALL echo %%x:~%start%,%length%%%

SETLOCAL ENABLEDELAYEDEXPANSION
SET /a start=6
SET /a length=4

SET "var=!x:~%start%,%length%!"
ECHO var=%var%
echo !x:~%start%,%length%!

GOTO :EOF

两种方法 - 第一种使用标准模式,第二种使用delayedexpansion。关于delayedexpansion有数百个关于SO的例子。