Batch file 批处理文件集

Batch file 批处理文件集,batch-file,Batch File,我想在这里得到一个变量 我发现这个dir=%dir:~-%var%%不幸的是,它不起作用。 然后我试着: set var=2 echo dir=%%dir:~-%var%%% > file.txt for /f "tokens=* delims=" %%a in (file.txt) do set dir=%%a 但接下来是真正的dir%dir:~-2%。如果有人明白我的意思,我是在问你有没有办法?? THNX 要在变量子字符串操作中使用变量,最简单的方法是使用延迟展开 要在变量子字

我想在这里得到一个变量

我发现这个
dir=%dir:~-%var%%
不幸的是,它不起作用。 然后我试着:

set var=2

echo dir=%%dir:~-%var%%% > file.txt

for /f "tokens=* delims=" %%a in (file.txt) do set dir=%%a
但接下来是真正的dir
%dir:~-2%
。如果有人明白我的意思,我是在问你有没有办法?? THNX

要在变量子字符串操作中使用变量,最简单的方法是使用延迟展开


要在变量子字符串操作中使用变量,最简单的方法是使用延迟展开

如果要在一行中展开变量两次,则需要使用延迟展开:

setlocal EnableDelayedExpansion
set var=2
echo dir=!dir:~-%var%! > file.txt
第一次扩展发生在
%var%
,第二次(延迟)扩展发生在
!目录:~-2

EDIT:另一种可能的方法是使用
call
命令再次解析该行:

第一次解析该行时,将执行第一次扩展:

call echo dir=%dir:~-2% > file.txt

call
命令导致再次解析该行并获得最终结果。

如果要将一行中的变量展开两次,则需要使用延迟展开:

setlocal EnableDelayedExpansion
set var=2
echo dir=!dir:~-%var%! > file.txt
第一次扩展发生在
%var%
,第二次(延迟)扩展发生在
!目录:~-2

EDIT:另一种可能的方法是使用
call
命令再次解析该行:

第一次解析该行时,将执行第一次扩展:

call echo dir=%dir:~-2% > file.txt

call
命令会导致再次解析该行并获得最终结果。

下面是另一种方法,可以使用您的示例来完成此操作

以这种方式使用
调用
会导致
^
字符出现问题,并且比延迟扩展相对较慢

@echo off
set dir=aaabbbccc
set var=3
>file.txt call echo dir=%%dir:~-%var%%% 
pause

下面是用您的示例实现这一点的另一种方法

以这种方式使用
调用
会导致
^
字符出现问题,并且比延迟扩展相对较慢

@echo off
set dir=aaabbbccc
set var=3
>file.txt call echo dir=%%dir:~-%var%%% 
pause