批处理命令不能在for里面修改%%~ni的值么?

2024-11-23 00:20:40
推荐回答(4个)
回答1:

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的大写变数名
比较易读,而且避免与不分大小写的组合键混淆。

回答2:

有两种方法,楼上的都已经说完了,没有错误,我了给你介绍延迟变量
语句: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

回答3:

@echo off&setlocal enabledelayedexpansion

用延迟变量,不然for循环里的赋值得在结束后才成功.

for /f "delims=" %%i in ('dir /b *.*') do (
set str=%%~ni
set str1=!str:~8,6!
)

回答4:

for /f "delims=" %%i in ('dir /b *.*') do (
set str=%%~ni
call set str1=%%str:~8,6%%
)