高分,在DOS脚本中如何截取For循环内延迟变量的一部分字符串?
题目有点绕口,我举个例子FOR%%iin(c:\*_BAK)DO(REM开启延迟变量SETLOCALENABLEDELAYEDEXPANSIONREM先从循环子中拿到当前...
题目有点绕口,我举个例子
FOR %%i in (c:\*_BAK) DO (
REM 开启延迟变量
SETLOCAL ENABLEDELAYEDEXPANSION
REM 先从循环子中拿到当前已_BAK结尾的文件名并赋值给一个变量
SET BAK_FILE_NAME=%%i
REM 关键是这里,我想通过上面取到的以“_BAK”结尾的文件名 _
REM _ (比如TEST01.TXT_BAK)取到不带最后那个"_BAK"的文件 _
REM _ 名(比如TEST01.TXT),我按照正常截取字符串的方式不 _
REM _ 行,难道延迟变量就不能进行字符串操作吗?
REM 我试过各种写法包括下面3种,好像都不行。
SET ORG_FILE_NAME=%BAK_FILE_NAME:~-4%
SET ORG_FILE_NAME=%!BAK_FILE_NAME!:~-4%
SET ORG_FILE_NAME=!BAK_FILE_NAME:~-4!
)
综上,问题都写在代码注释里面了,请教高手有没有什么办法? 展开
FOR %%i in (c:\*_BAK) DO (
REM 开启延迟变量
SETLOCAL ENABLEDELAYEDEXPANSION
REM 先从循环子中拿到当前已_BAK结尾的文件名并赋值给一个变量
SET BAK_FILE_NAME=%%i
REM 关键是这里,我想通过上面取到的以“_BAK”结尾的文件名 _
REM _ (比如TEST01.TXT_BAK)取到不带最后那个"_BAK"的文件 _
REM _ 名(比如TEST01.TXT),我按照正常截取字符串的方式不 _
REM _ 行,难道延迟变量就不能进行字符串操作吗?
REM 我试过各种写法包括下面3种,好像都不行。
SET ORG_FILE_NAME=%BAK_FILE_NAME:~-4%
SET ORG_FILE_NAME=%!BAK_FILE_NAME!:~-4%
SET ORG_FILE_NAME=!BAK_FILE_NAME:~-4!
)
综上,问题都写在代码注释里面了,请教高手有没有什么办法? 展开
2个回答
展开全部
可以的,YK老师已经把原因找出来了,缩减代码别减得过头了。
!xz:~0,-4!只能减成!xz:~,-4!
我先用
for /l %%a in (1 1 10) do cd.>wkd%%a.xz_bak
建立了_BAK类似文件
然后使用批处理在_BAK文件所在文件夹运行,显示正常,你可作为参考
@echo off
FOR %%i in (*_BAK) DO (
SETLOCAL ENABLEDELAYEDEXPANSION
SET BAK_FILE_NAME=%%i
ECHO !BAK_FILE_NAME:~,-4!
)
PAUSE
!xz:~0,-4!只能减成!xz:~,-4!
我先用
for /l %%a in (1 1 10) do cd.>wkd%%a.xz_bak
建立了_BAK类似文件
然后使用批处理在_BAK文件所在文件夹运行,显示正常,你可作为参考
@echo off
FOR %%i in (*_BAK) DO (
SETLOCAL ENABLEDELAYEDEXPANSION
SET BAK_FILE_NAME=%%i
ECHO !BAK_FILE_NAME:~,-4!
)
PAUSE
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询