Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file CMD:在变量中设置/扩展变量的管道回显_Batch File_Command Line_Cmd_Command Prompt_Piping - Fatal编程技术网

Batch file CMD:在变量中设置/扩展变量的管道回显

Batch file CMD:在变量中设置/扩展变量的管道回显,batch-file,command-line,cmd,command-prompt,piping,Batch File,Command Line,Cmd,Command Prompt,Piping,%x:~12,3%返回从x变量中第12个字符开始的3个字符。 我一直试图实现的是使用变量,而不是12和3。 比如说y=12和z=3。 然后,您不能使用%x:~%y%,%z%%,因为CMD会认为%x:~%是一个变量 您可以做的是设置变量=%%x:~%y%,%z%%。这将扩展内部变量y和z,而不是x,因此var的值为%x:~12,3%。 现在剩下的任务是最终扩展%x:~12,3%。我一直在尝试在开始时附加echo,以便var=echo%x:~12,3%。 如果您现在在命令行或批处理文件中使用%var

%x:~12,3%
返回从x变量中第12个字符开始的3个字符。 我一直试图实现的是使用变量,而不是
12
3
。 比如说
y=12
z=3
。 然后,您不能使用
%x:~%y%,%z%%
,因为CMD会认为
%x:~%
是一个变量

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

我在想,如果您将var设置为
%x:~12,3%
,那么可能会回显它 然后将输出传输到另一个
ECHO
命令或
SET
命令中,表达式将被展开,但
ECHO
SET
似乎根本不接受数据被传输到其中


我如何才能做到这一点?

您需要启用延迟扩展

@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

您需要启用延迟扩展

@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
@ECHO关闭
SETLOCAL
设置“x=abcdefghijklmmopqrstuvwxyz”
设置/a开始=12
设置/a长度=3
调用集“var=%%x:~%start%,%length%%”
回音变量=%var%
调用echo%%x:~%start%,%length%%
SETLOCAL ENABLEDELAYEDEXPANSION
设置/a开始=6
设置/a长度=4
设置“var=!x:~%start%,%length%!”
回音变量=%var%
回声!x:~%start%,%length%!
后藤:EOF
有两种方法-第一种是在标准模式下,第二种是使用
delayedexpansion
。关于延迟扩展的例子有数百个。

@ECHO OFF
@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
SETLOCAL 设置“x=abcdefghijklmmopqrstuvwxyz” 设置/a开始=12 设置/a长度=3 调用集“var=%%x:~%start%,%length%%” 回音变量=%var% 调用echo%%x:~%start%,%length%% SETLOCAL ENABLEDELAYEDEXPANSION 设置/a开始=6 设置/a长度=4 设置“var=!x:~%start%,%length%!” 回音变量=%var% 回声!x:~%start%,%length%! 后藤:EOF

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

我复制了下面的全文;我只是更改了变量和特定示例的名称,以匹配此问题的名称:

@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
%x:~12,3%
返回从x中第12个字符开始的3个字符 变量我一直试图实现的是使用变量 而不是
12
3
。比如说
y=12
z=3


如果您想为子字符串位置和长度使用另一个变量,那么您必须知道用其值替换包含在百分比中的变量是从左到右解析的;这意味着:
%x:~%y%,%z%%
不会给出所需的结果,因为这意味着:显示
x:~
变量的值,后跟
y
,后跟
变量的值,等等

要解决此问题,必须使用延迟展开,即在开头插入
setlocal EnableDelayedExpansion
命令,用百分比括起子字符串变量,用感叹号括起原始变量:

setlocal EnableDelayedExpansion
set x=0123456789ABCDEF
set y=12
set z=3
set var=!x:~%y%,%z%!
您还可以使用FOR命令的参数作为索引:
FOR/F“tokens=1,2”%%i in(“%y%%z%”)do set var=!x:~%%i,%%j

若要在/IF的内部索引更改时获取子字符串的值,请将变量括在两个百分比中,并在命令前面加上
call
。例如,要在0和12之间的随机
y
位置以及长度
z
显示子字符串:

if %some% == %test% (
   set /A y=!random! %% 13
   call echo %%x:~!y!,%z%%%
)
也可以在括号外使用此方法,以避免延迟展开:

call echo %%x:~%y%,%z%%%
实现前面过程的另一种方法是使用额外的FOR命令,通过等效的可替换参数更改索引的延迟扩展,然后对原始变量使用延迟扩展。此方法的运行速度比上一次调用快:

if %some% == %test% (
   set /A y=!random! %% 13
   for %%y in (!y!) do echo !x:~%%y,%z%!
)

我复制了下面的全文;我只是更改了变量和特定示例的名称,以匹配此问题的名称:

%x:~12,3%
返回从x中第12个字符开始的3个字符 变量我一直试图实现的是使用变量 而不是
12
3
。比如说
y=12
z=3


如果您想为子字符串位置和长度使用另一个变量,那么您必须知道用其值替换包含在百分比中的变量是从左到右解析的;这意味着:
%x:~%y%,%z%%
不会给出所需的结果,因为这意味着:显示
x:~
变量的值,后跟
y
,后跟
变量的值,等等

要解决此问题,必须使用延迟展开,即在开头插入
setlocal EnableDelayedExpansion
命令,用百分比括起子字符串变量,用感叹号括起原始变量:

setlocal EnableDelayedExpansion
set x=0123456789ABCDEF
set y=12
set z=3
set var=!x:~%y%,%z%!
您还可以使用FOR命令的参数作为索引:
FOR/F“tokens=1,2”%%i in(“%y%%z%”)do set var=!x:~%%i,%%j

若要在/IF的内部索引更改时获取子字符串的值,请将变量括在两个百分比中,并在命令前面加上
call
。例如,要在0和12之间的随机
y
位置以及长度
z
显示子字符串:

if %some% == %test% (
   set /A y=!random! %% 13
   call echo %%x:~!y!,%z%%%
)
也可以在括号外使用此方法,以避免延迟展开:

call echo %%x:~%y%,%z%%%
实现上一个过程的另一种方法