批处理for循环中怎么给变量赋值、截取字符等操作?

下面一段代码,我的目的是在文件夹E:\test里,找出文件名后缀是.GRB2的文件,
并对文件名进行判断。找出符合条件的文件名,把这个文件名写进下一句命令里。
但我对DOS了解不多,语法不通。
@echo off&setlocal enabledelayedexpansion
set work_path=E:\test
E:
cd %work_path%

for /R %%s in (*.GRB2) do (
set str=%%s
echo !str!
rem 上面这句,屏幕输出的是e:\test\abc.GRB2
echo !str!:~3,4
rem 上面这句,屏幕输出的是e:\test\abc.GRB2:~3,4 我想要的是截取字符串后的test
if "!str!:~3,4"=="test" (
echo, %%s
rem 上一句显然也不对,并没有对!str!进行字符串截取
g2ctl %%s > e:/test/abc.ctl
rem 上一句是一个生成e:/test/abc.ctl文件的命令,其中%%s是符合上面if条件的文件名
) else (
rem 这里应该写什么,继续循环?
)
)
pause
我现在已经明白了想要截取字符串,需要先set a=!str!

if后面没有跟else,可以正常运行了

第1个回答  2016-12-20
@echo off
set "work_path=E:\test"
cd /d "work_path"
for /f "delims=" %%a in ('dir /a-d/b *.GRB2') do g2ctl "%%a">"%%~na.ctl"
pause

无误及时采纳回答

本回答被提问者和网友采纳