Board logo

标题: 怎样获得当前盘符并保存在文本中? [打印本页]

作者: chengbiner     时间: 2006-11-18 06:44    标题: 怎样获得当前盘符并保存在文本中?

比如要运行移动盘中的一个软件,但是在不同的机子上盘符会不同!
作者: 不得不爱     时间: 2006-11-18 06:52

set a=%0
echo %a:~0,2%>temp.txt

作者: chengbiner     时间: 2006-11-18 06:55
好象还是不行啊!
作者: 不得不爱     时间: 2006-11-18 07:07
再试:(把下面的内容写到BAT文件里执行)
set a=%~0
echo %a:~0,2%>temp.txt
或者用下面的代码:
echo %~d0>temp.txt
作者: chengbiner     时间: 2006-11-18 07:09
谢谢斑竹,已经可以了
作者: namejm     时间: 2006-11-18 07:24
  关于当前盘符的获得,一般有以下三种方案:

  1、cd命令:
@echo off
echo 当前路径是:%cd%
echo 当前盘符是:%cd:~0,1%
pause
  2、for语句扩展:
@echo off
for %%i in (.) do set var=%%~di
echo 当前盘符是:%var:~0,1%
pause
  3、参数%~0方案:
@echo off
set a=%~0
echo 当前盘符为:%a:~0,1%
pause
  当然,还有其他的方案,一般都是用for语句来提取返回值特定位上的字符,而无一例外的都需要通过截取字符的方式来实现(蓝色部分说法不完全准确,具体情况请参考11F的举例)。

[ Last edited by namejm on 2006-11-24 at 08:58 PM ]
作者: 不得不爱     时间: 2006-11-18 07:38
%~0不会得到带引号的当前路径啊
作者: namejm     时间: 2006-11-18 08:07


  Quote:
Originally posted by 不得不爱 at 2006-11-17 18:38:
%~0不会得到带引号的当前路径啊

  呵呵,不好意思,看走眼了,我少了个~符号。
作者: hxuan999     时间: 2006-11-23 07:10


  Quote:
 当然,还有其他的方案,一般都是用for语句来提取返回值特定位上的字符,而无一例外的都需要通过截取字符的方式来实现。

好像可以例外,不知道这样行不?
@echo off
set a=%~d0
echo 当前盘符为:%a::=%
pause

作者: namejm     时间: 2006-11-23 07:16
  %a::=% 语句就是通过去掉显示结果中的冒号来实现的,实质上还是截取了特定位置上的字符。
作者: hxuan999     时间: 2006-11-25 04:11
受以下这个贴的启发,发现了另一个取当前盘符的方法.
请教willsort以及 各位 大哥关于prompt _$T$_

代码如下:

  Quote:

  1. @echo off
  2. for /f "usebackq skip=1 eol=;" %%i in (`"echo exit|%comspec% /k prompt $N$_;"`) do set "d=%%i"
  3. echo 当前盘符为:%d%
  4. pause
        hxuan?表ー:  2006-11-24  15:13

还有下面这些代码,可以输出当前盘符,当前路径,当前日期,当前时间,还有版本号,当前也可以把你个性的DOS提符输出来.

  Quote:

  1. @echo off
  2. for /f "usebackq skip=1 eol=; delims=" %%i in (`"echo exit|%comspec% /k prompt $N$_;"`) do set "aaa=%%i"
  3. echo %aaa%
  4. for /f "usebackq skip=1 eol=; delims=" %%i in (`"echo exit|%comspec% /k prompt $D$_;"`) do set "aaa=%%i"
  5. echo %aaa%
  6. for /f "usebackq skip=1 eol=; delims=" %%i in (`"echo exit|%comspec% /k prompt $E$_;"`) do set "aaa=%%i"
  7. echo %aaa%
  8. for /f "usebackq skip=1 eol=; delims=" %%i in (`"echo exit|%comspec% /k prompt $P$_;"`) do set "aaa=%%i"
  9. echo %aaa%
  10. for /f "usebackq skip=1 eol=; delims=" %%i in (`"echo exit|%comspec% /k prompt $T$_;"`) do set "aaa=%%i"
  11. echo %aaa%
  12. for /f "usebackq skip=1 eol=; delims=" %%i in (`"echo exit|%comspec% /k prompt $V$_;"`) do set "aaa=%%i"
  13. echo %aaa%
  14. pause
        hxuan?表ー:  2006-11-24  15:19

[ Last edited by hxuan999 on 2006-12-13 at 11:40 AM ]
作者: namejm     时间: 2006-11-25 09:54
  prompt 属于比较冷门的命令了,却还有如此强悍的功能,值得各位重视。不错不错,给 hxuan999 加分奖励。
作者: redtek     时间: 2006-11-25 10:20
欣赏~~
hxuan999兄的想像力真丰富~:)
作者: electronixtar     时间: 2006-11-25 10:33


  Quote:
prompt 属于比较冷门的命令了,却还有如此强悍的功能,值得各位重视。不错不错,给 hxuan999 加分奖励。

汗一个,想以前的DOS/9x批处理,几乎全部是 prompt 的天下,相关技巧暴多
作者: redtek     时间: 2006-11-25 10:59
还可以再新开个 Prompt 的技巧讨论专贴,既能发扬技巧又能多赚积分儿~哈哈……
作者: vkill     时间: 2006-11-25 23:44
prompt第一次听说哦
作者: ccwan     时间: 2006-11-25 23:50
Prompt
更改 Cmd.exe 提示符。如果不带参数使用,prompt 将命令提示符重置为默认设置,当前驱动器盘符后接当前目录和大于符号 (>)。

语法
prompt [text]

参数
text
指定要包含在系统提示符中的任何文本和信息。
/?
在命令提示符显示帮助。
注释
可以自定义命令提示符,以显示所需的任何文本,包括当前目录名、时间和日期以及 Windows XP 版本号等信息。
下表列出了能够在 text 命令行选项中包含的字符组合,而不是(或除了)一个或多个字符串。列表包括对添加到命令提示符的每个字符组合的文本或信息的简要描述。 字符 说明
$q  =(等号)  
$$  $(美元符号)  
$t  当前时间  
$d  当前日期  
$p  当前驱动器和路径  
$v  Windows XP 版本号  
$n  当前驱动器  
$g  >(大于号)  
$l  <(小于号)  
$b  |(pipe)  
$_  回车符 - 换行符  
$e  ANSI 转义代码(代码 27)  
$h  退格键(删除已写入提示命令行的字符)  
$a & (与符号)
$c ((左括号)
$F )(右括号)
$s space

启用了命令扩展(即默认值)时,prompt 命令可支持下表中列出的格式化字符。 字符 说明
$+  零个或多个加号 (+) 字符,取决于 pushd 目录堆栈的深度,每推入一级一个字符。
$m  与当前驱动器盘符关联的远程名称,如果当前驱动器不是网络驱动器,则为空字符串。

如果在文本参数中包括 $p字符,系统将在输入每个命令后读取磁盘,以确定当前驱动器和路径。这样会花费额外的时间,特别是对于软盘驱动器。
范例
以下范例设置命令提示符以显示当前驱动器和路径,后接大于号 (>):

prompt $p$g

以下命令显示两行提示,第一行显示当前时间,第二行显示当前日期:

prompt time is:$t$_date is$d

[ Last edited by ccwan on 2006-11-25 at 11:52 PM ]
作者: chengbiner     时间: 2006-12-2 09:16
哇……几天没来竟然有这么多答案
看来我是愚笨哦
作者: ragingfire     时间: 2010-6-9 13:44
set a=%0
echo %a:~0,2%>temp.txt

请教怎么借读?