中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
作者:
标题: 这些命令是什么意思 上一主题 | 下一主题
MoFeng
新手上路




积分 16
发帖 7
注册 2006-12-30
状态 离线
『楼 主』:  这些命令是什么意思

请問一下下面的是什么意思,在一些批处理中看到的,可是又不知是什么意思怎么用
(-) 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"  中的 ^| 表示什么意思,那个 ^ 能帮忙说得明白一点吗。

谢谢

2006-12-31 07:04
查看资料  发短消息 网志   编辑帖子  回复  引用回复
zh159
金牌会员




积分 3687
发帖 1467
注册 2005-8-8
状态 离线
『第 2 楼』:  

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


2006-12-31 09:26
查看资料  发短消息 网志   编辑帖子  回复  引用回复
dikex
高级用户

潜水修练批处理



积分 788
发帖 366
注册 2006-12-31
状态 离线
『第 3 楼』:  

第五个前面应该还有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 ]

2006-12-31 11:43
查看资料  发短消息 网志   编辑帖子  回复  引用回复
zh159
金牌会员




积分 3687
发帖 1467
注册 2005-8-8
状态 离线
『第 4 楼』:  

ipconfig | find /i "ip"
是把执行ipconfig的信息传送给find查找带“ip”字符部分,不是echo ipconfig过去

好像^也叫转义字符

2006-12-31 12:00
查看资料  发短消息 网志   编辑帖子  回复  引用回复
MoFeng
新手上路




积分 16
发帖 7
注册 2006-12-30
状态 离线
『第 5 楼』:  

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 个文件

老是提示让你选。怎么才可以不用选直接复制过去。

2006-12-31 12:43
查看资料  发短消息 网志   编辑帖子  回复  引用回复
lxmxn
版主




积分 11386
发帖 4938
注册 2006-7-23
状态 离线
『第 6 楼』:  


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


2006-12-31 12:48
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
dikex
高级用户

潜水修练批处理



积分 788
发帖 366
注册 2006-12-31
状态 离线
『第 7 楼』:  

^通常只在echo后面才会有用,作用是使得一些特殊字符(/,|,||,&)等按照他们原来的样子输出,你执行下面几个命令就会命令他的作用了
echo ^|  对比   echo |
echo ^& 对比 echo &

   此帖被 +1 点积分    点击查看详情   
评分人:【 MoFeng 分数: +1  时间:2006-12-31 13:02


2006-12-31 12:48
查看资料  发短消息 网志   编辑帖子  回复  引用回复
dikex
高级用户

潜水修练批处理



积分 788
发帖 366
注册 2006-12-31
状态 离线
『第 8 楼』:  

复制那个运行xcopy /?看看那些参数就知道了

2006-12-31 12:49
查看资料  发短消息 网志   编辑帖子  回复  引用回复
MoFeng
新手上路




积分 16
发帖 7
注册 2006-12-30
状态 离线
『第 9 楼』:  



  Quote:
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 个文件

2006-12-31 13:00
查看资料  发短消息 网志   编辑帖子  回复  引用回复
MoFeng
新手上路




积分 16
发帖 7
注册 2006-12-30
状态 离线
『第 10 楼』:  又错了。学点东西可真不容易

显示自己的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 处于关闭状态。

这又是什么原因。

2006-12-31 13:14
查看资料  发短消息 网志   编辑帖子  回复  引用回复
lxmxn
版主




积分 11386
发帖 4938
注册 2006-7-23
状态 离线
『第 11 楼』:  


@echo off&(for /f "usebackq tokens=2 delims=:" %%i in (`ipconfig ^| find /i "ip address"`) do set ip=%%i)&call echo %%ip%%&pause


2006-12-31 13:23
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
vkill
金牌会员





积分 4103
发帖 1744
注册 2006-1-20
来自 甘肃.临泽
状态 离线
『第 12 楼』:  

问问题的时候怎么不先搜索那?

2007-1-1 01:07
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
MoFeng
新手上路




积分 16
发帖 7
注册 2006-12-30
状态 离线
『第 13 楼』:  上面的问题可结了。原因找到了。谢谢

上面的问题可结了。原因找到了。谢谢

2007-1-1 01:17
查看资料  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: