批处理命令不能在for里面修改%%~ni的值么?
for/f"delims="%%iin('dir/b*.*')do(setstr=%%~nisetstr1=%str:~8,6%)为什么str1的值取不到?难道不能在fo...
for /f "delims=" %%i in ('dir /b *.*') do (
set str=%%~ni
set str1=%str:~8,6%
)
为什么str1的值取不到?难道不能在for里面修改值吗? 展开
set str=%%~ni
set str1=%str:~8,6%
)
为什么str1的值取不到?难道不能在for里面修改值吗? 展开
展开全部
for命令是一个比较复杂的命令,主要用于参数在指定的范围内循环执行命令。
在批处理文件中使用FOR命令时,指定变数请使用%%variable
FOR变数参照的替换已被增强。您现在可以使用下列选项语法:~I -删除任何引号("),扩充%I
%~fI -将%I扩充到一个完全合格的路径名
%~dI -仅将%I扩充到一个驱动器号
%~pI -仅将%I扩充到一个路径
%~nI -仅将%I扩充到一个文件名
%~xI -仅将%I扩充到一个文件延伸名
%~sI -扩充的路径只含有短名
%~aI -将%I扩充到文件的文件内容
%~tI -将%I扩充到文件的日期/时间
%~zI -将%I扩充到文件的大小
%~$PATH:I -查找列在路径环境变数的目录,并将%I扩充
到找到的第一个完全合格的名称。如果环境变数
未被定义,或者没有找到文件,此组合键会扩充空字元串可以组合修饰符来得到多重结果:
%~dpI -仅将%I扩充到一个驱动器号和路径
%~nxI -仅将%I扩充到一个文件名和延伸名
%~fsI -仅将%I扩充到一个带有短名的完整路径名
%~dp$PATH:i -查找列在路径环境变数的目录,并将%I扩充
到找到的第一个驱动器号和路径。
%~ftzaI -将%I扩充到类似输出线路的DIR
在以上例子中,%I和PATH可用其他有效数值代替。 %~语法
用一个有效的FOR变数名停止。选取类似%I的大写变数名
比较易读,而且避免与不分大小写的组合键混淆。
在批处理文件中使用FOR命令时,指定变数请使用%%variable
FOR变数参照的替换已被增强。您现在可以使用下列选项语法:~I -删除任何引号("),扩充%I
%~fI -将%I扩充到一个完全合格的路径名
%~dI -仅将%I扩充到一个驱动器号
%~pI -仅将%I扩充到一个路径
%~nI -仅将%I扩充到一个文件名
%~xI -仅将%I扩充到一个文件延伸名
%~sI -扩充的路径只含有短名
%~aI -将%I扩充到文件的文件内容
%~tI -将%I扩充到文件的日期/时间
%~zI -将%I扩充到文件的大小
%~$PATH:I -查找列在路径环境变数的目录,并将%I扩充
到找到的第一个完全合格的名称。如果环境变数
未被定义,或者没有找到文件,此组合键会扩充空字元串可以组合修饰符来得到多重结果:
%~dpI -仅将%I扩充到一个驱动器号和路径
%~nxI -仅将%I扩充到一个文件名和延伸名
%~fsI -仅将%I扩充到一个带有短名的完整路径名
%~dp$PATH:i -查找列在路径环境变数的目录,并将%I扩充
到找到的第一个驱动器号和路径。
%~ftzaI -将%I扩充到类似输出线路的DIR
在以上例子中,%I和PATH可用其他有效数值代替。 %~语法
用一个有效的FOR变数名停止。选取类似%I的大写变数名
比较易读,而且避免与不分大小写的组合键混淆。
展开全部
有两种方法,楼上的都已经说完了,没有错误,我了给你介绍延迟变量
语句:setlocal enabledelayedexpansion
阐明:[就不讲那些大道理了]其实举例是最好的说明
@echo off & setlocal enabledelayedexpansion
set aa=0
set bb=bcd
::for 语句是一个语句
for /i %%i in (0,1,50) do (set /a aa+=1
set bb=bbbb
echo %aa% !aa!
echo %bb% !bb!)
pause
语句:setlocal enabledelayedexpansion
阐明:[就不讲那些大道理了]其实举例是最好的说明
@echo off & setlocal enabledelayedexpansion
set aa=0
set bb=bcd
::for 语句是一个语句
for /i %%i in (0,1,50) do (set /a aa+=1
set bb=bbbb
echo %aa% !aa!
echo %bb% !bb!)
pause
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
@echo off&setlocal enabledelayedexpansion
用延迟变量,不然for循环里的赋值得在结束后才成功.
for /f "delims=" %%i in ('dir /b *.*') do (
set str=%%~ni
set str1=!str:~8,6!
)
用延迟变量,不然for循环里的赋值得在结束后才成功.
for /f "delims=" %%i in ('dir /b *.*') do (
set str=%%~ni
set str1=!str:~8,6!
)
追问
显示语法不正确啊,!这个应该是%啊为什么是!号呢?
追答
你最上面有加setlocal enabledelayedexpansion么?完整的是:
@echo off&setlocal enabledelayedexpansion
for /f "delims=" %%i in ('dir /b *.*') do (
set “str=%%~ni”
set “str1=!str:~8,6!”
)
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐于2016-03-01
展开全部
for /f "delims=" %%i in ('dir /b *.*') do (
set str=%%~ni
call set str1=%%str:~8,6%%
)
set str=%%~ni
call set str1=%%str:~8,6%%
)
更多追问追答
追问
语法都不对。
追答
经试验,语法不仅正确,而且结果也正确。
你的问题就是因为你不懂语法。你有试验我的代码吗?
下面的代码可以明显说明问题:
会显示当前文件夹中的“文件名 截取的字符”
@echo off
for /f "delims=" %%i in ('dir /b *.*') do (set str=%%~ni
call echo %%~ni%%str:~8,6%%)
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询