我想獲得dir=%dir:~-
這裏%
變種。我發現這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:~-2%
目錄。如果有人瞭解我的,我問你有沒有辦法做到這一點? 日Thnx
我想獲得dir=%dir:~-
這裏%
變種。我發現這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:~-2%
目錄。如果有人瞭解我的,我問你有沒有辦法做到這一點? 日Thnx
如果你想擴展在一條線上的變量兩次,你需要使用延遲擴展:
setlocal EnableDelayedExpansion
set var=2
echo dir=!dir:~-%var%! > file.txt
第一膨脹發生在%var%
,第二(延遲)膨脹發生在!dir:~-2!
。
EDIT:另一種可能的方式是使用call
命令使得該線是再次解析:
set var=2
call echo dir=%%dir:~-%var%%% > file.txt
當行被解析所述第一時間時,執行第一膨脹:
call echo dir=%dir:~-2% > file.txt
call
命令導致該行再次被解析並獲得最終結果。
@echo off
setlocal enabledelayedexpansion
set "var=-2"
echo !cd:~%var%!
使用可變子操作中的變量,最簡單的方法是使用延遲擴展
這裏是另一種方法來做你的例子。
使用call
這種方式導致^
字符的問題,並且比延遲擴展相對慢。
@echo off
set dir=aaabbbccc
set var=3
>file.txt call echo dir=%%dir:~-%var%%%
pause