中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

中国DOS联盟论坛
现在时间是 2026-08-02 22:48
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 这些命令是什么意思 查看 1,087 回复 12
楼 主 这些命令是什么意思 发表于 2006-12-31 07:04 ·  中国 湖南 长沙 电信
新手上路
积分 16
发帖 7
注册 2006-12-30 07:33
19年会员
UID 74987
性别 女
状态 离线
请問一下下面的是什么意思,在一些批处理中看到的,可是又不知是什么意思怎么用
(-) setlocal enabledelayedexpansion
看意思应该是设置变量的。可是用这个有什么用,我觉得不加这句也没什么的啊

(二) ping -n 1 127.1>nul
这个是什么意思,后面的 nul 在好多批处理中看到了。是“什么都不做的意思吗”

(三)
echo/
echo\
看到这个有点奇怪,是什么意思

(四)这是一个BAT文件。
按扩展名分类.bat
for %%i in (*) do (md %%~xi
move *%%~xi %%~xi)
pause

这个后面的(md %%~xi move *%%~xi %%~xi) 是什么意思。

(五)
ipconfig ^| find /i "ip" 中的 ^| 表示什么意思,那个 ^ 能帮忙说得明白一点吗。

谢谢
2 发表于 2006-12-31 09:26 ·  中国 广西 南宁 联通
金牌会员
★★★★
积分 3,687
发帖 1,467
注册 2005-08-08 12:00
20年会员
UID 44210
状态 离线
1、试试去掉setlocal enabledelayedexpansion看看,或者去掉后把!n!换成%n%
@echo off
setlocal enabledelayedexpansion

for %%n in (a b c d e f) do (
set /a N+=1
echo %%n!n!)

set a=10
set b=a
echo !%b%!
echo/
echo\

pause
exit

2、
>nul,将显示内容输出到空设备(nul),也就是不显示

4、
多试试命令的这种用法:for/?
另外,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

其他的会用不会说,下面的接着...
本帖最近评分记录 (共 1 条) 点击查看详情
评分人分数时间
MoFeng +1 2006-12-31 12:31
3 发表于 2006-12-31 11:43 ·  中国 广东 广州 天河区 电信
高级用户
★★★
潜水修练批处理
积分 788
发帖 366
注册 2006-12-31 02:43
19年会员
UID 75048
性别 男
状态 离线
第五个前面应该还有echo吧,而且后面跟着>或者>>文件名,完整的应该是类似这样的:
echo ipconfig ^| find /i "ip" >>a.bat

这个运行的结果是把 ipconfig | find /i "ip" 这个语句添加到a.bat文件里面
由于|是一个特殊的符号,直接echo ipconfig | find /i "ip" >>a.bat的或是得不到想要的效果的,而^的作用是把特殊符号按照原来的样子输入,如:
echo ^<
::显示<
echo ^>
::显示>

[ Last edited by dikex on 2006-12-30 at 10:45 PM ]
4 发表于 2006-12-31 12:00 ·  中国 河南 许昌 电信
金牌会员
★★★★
积分 3,687
发帖 1,467
注册 2005-08-08 12:00
20年会员
UID 44210
状态 离线
ipconfig | find /i "ip"
是把执行ipconfig的信息传送给find查找带“ip”字符部分,不是echo ipconfig过去

好像^也叫转义字符
5 发表于 2006-12-31 12:43 ·  中国 湖南 长沙 电信
新手上路
积分 16
发帖 7
注册 2006-12-30 07:33
19年会员
UID 74987
性别 女
状态 离线
ipconfig ^| find /i "ip" 中的 ^| 表示什么意思,那个 ^ 能帮忙说得明白一点吗

又有问题了
我的目的是要把一些.exe文件从一个文件夹中拷到另一个文件中,文件名在一个文本文件中。
for /f "tokens=4" %%i in ('type sys32中多加的文件名.txt ^| find /i ".exe"')do xcopy temp\%%~nxi temp2\%%~nxi

为什么会这样

目标 temp2\bootcfg.exe 是文件名
还是目录名
(F = 文件,D = 目录)? f
temp\bootcfg.exe
复制了 1 个文件

老是提示让你选。怎么才可以不用选直接复制过去。
6 发表于 2006-12-31 12:48 ·  中国 湖北 武汉 电信
版主
★★★★★
积分 11,386
发帖 4,938
注册 2006-07-23 17:10
20年会员
UID 59080
状态 离线

xcopy /I temp\%%~nxi temp2\%%~nxi
7 发表于 2006-12-31 12:48 ·  中国 广东 广州 天河区 电信
高级用户
★★★
潜水修练批处理
积分 788
发帖 366
注册 2006-12-31 02:43
19年会员
UID 75048
性别 男
状态 离线
^通常只在echo后面才会有用,作用是使得一些特殊字符(/,|,||,&)等按照他们原来的样子输出,你执行下面几个命令就会命令他的作用了
echo ^| 对比 echo |
echo ^& 对比 echo &
本帖最近评分记录 (共 1 条) 点击查看详情
评分人分数时间
MoFeng +1 2006-12-31 13:02
8 发表于 2006-12-31 12:49 ·  中国 广东 广州 天河区 电信
高级用户
★★★
潜水修练批处理
积分 788
发帖 366
注册 2006-12-31 02:43
19年会员
UID 75048
性别 男
状态 离线
复制那个运行xcopy /?看看那些参数就知道了
9 发表于 2006-12-31 13:00 ·  中国 湖南 长沙 电信
新手上路
积分 16
发帖 7
注册 2006-12-30 07:33
19年会员
UID 74987
性别 女
状态 离线
Originally posted by lxmxn at 2006-12-30 11:48 PM:

xcopy /I temp\%%~nxi temp2\%%~nxi


那个不行。我试过了
可是错误信息是这样的。FOR语句可能有问题。不知错在哪。

目标 temp2\bootcfg.exe 是文件名
还是目录名
(F = 文件,D = 目录)? f
temp\bootcfg.exe
复制了 1 个文件
10 又错了。学点东西可真不容易 发表于 2006-12-31 13:14 ·  中国 湖南 长沙 电信
新手上路
积分 16
发帖 7
注册 2006-12-30 07:33
19年会员
UID 74987
性别 女
状态 离线
显示自己的IP.bat
@echo off
for /f "tokens=15" %%i in ('ipconfig ^| find /i "ip address"') do set ip=%%i
echo %ip%
pause

这个能行。可为什么这个不行呢
@echo off
for /f "usebackq tokens=15" %%i in ('"ipconfig ^| find /i "ip address""') do set

ip=%%i
echo %ip%
pause

显示的是
ECHO 处于关闭状态。

这又是什么原因。
11 发表于 2006-12-31 13:23 ·  中国 湖北 武汉 电信
版主
★★★★★
积分 11,386
发帖 4,938
注册 2006-07-23 17:10
20年会员
UID 59080
状态 离线

@echo off&(for /f "usebackq tokens=2 delims=:" %%i in (`ipconfig ^| find /i "ip address"`) do set ip=%%i)&call echo %%ip%%&pause
12 发表于 2007-01-01 01:07 ·  中国 甘肃 兰州 电信
金牌会员
★★★★
积分 4,103
发帖 1,744
注册 2006-01-20 13:00
20年会员
UID 49241
性别 男
来自 甘肃.临泽
状态 离线
问问题的时候怎么不先搜索那?
13 上面的问题可结了。原因找到了。谢谢 发表于 2007-01-01 01:17 ·  中国 湖南 长沙 电信
新手上路
积分 16
发帖 7
注册 2006-12-30 07:33
19年会员
UID 74987
性别 女
状态 离线
上面的问题可结了。原因找到了。谢谢
论坛跳转: