高分,在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!
)

综上,问题都写在代码注释里面了,请教高手有没有什么办法?
展开
 我来答
两只路边的蚂蚁ls
2010-05-12 · TA获得超过4467个赞
知道大有可为答主
回答量:2127
采纳率:100%
帮助的人:1364万
展开全部
可以的,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
yyykkkyyyy
2010-05-12 · TA获得超过3136个赞
知道大有可为答主
回答量:2691
采纳率:40%
帮助的人:3310万
展开全部
我看可以,应该你自己能找到原因,在for命令的do后临时插个测试 (echo %%i &pause)先看看是不是它本身就没取到想象中的“比如TEST01.TXT_BAK”
你那set语句好象差个逗号 1 、3总有一个可以 :~,-4
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式