无忧启动论坛

标题: 怎样在批处理文件里分别取得盘符和路径?谢谢! [打印本页]

作者: 小妹    时间: 2006-11-15 16:05
标题: 怎样在批处理文件里分别取得盘符和路径?谢谢!
打开批处理文件 book.bat 的路径是  E:\Tools\pub3

怎样获得  E:\Tools\pub3

又怎样从中取得  E:  和  Tools\pub3  

谢谢啦!

[ 本帖最后由 小妹 于 2006-11-15 06:12 PM 编辑 ]
作者: namejm    时间: 2006-11-15 17:32
  请试如下代码(XP系统下测试通过):

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "delims=" %%i in ("%cd%") do (
  4.     set str=%%~pni
  5.     echo 当前盘符是 %%~di
  6.     echo 当前路径是 !str:~1!
  7. )
  8. pause
复制代码

[ 本帖最后由 namejm 于 2006-11-15 05:36 PM 编辑 ]
作者: 小妹    时间: 2006-11-15 18:07
谢谢  namejm  兄!

在 XP 系统下通过,

但在 DOS 7.1 下报错, 我是想在 DOS 下使用,

请再想想办法,谢谢啦!
作者: namejm    时间: 2006-11-15 18:30
  对纯DOS下的批处理我非常陌生,如果支持字符位截取的话,可以用下面的代码:

  1. @echo off
  2. echo 当前的完整路径是 %cd%
  3. echo 当前盘符是 %cd:~0,1%
  4. echo 截取到的路径是 %cd:~,2%
  5. pause
复制代码

  如果不支持字符位的截取,暂时就只能取到 "盘符:\" 的格式,请试用下面的代码:

  1. @echo off
  2. set route=%cd%
  3. cd\
  4. echo %cd%
  5. cd %route%\
  6. echo %cd%
  7. pause
复制代码

[ 本帖最后由 namejm 于 2006-11-15 07:29 PM 编辑 ]
作者: 小妹    时间: 2006-11-15 19:21
谢谢  namejm  兄!

在 XP 系统下正常,但在 DOS 7.1 下,可能 %cd% 没取到值,所以

echo %cd%
echo %cd:~0,1%
echo %cd:~,2%
显示都是空的

还要麻烦您再想想办法,谢谢啦!
作者: namejm    时间: 2006-11-15 19:27
  难道 cd 不是内部命令?如果不是内部命令的话,那我就无能为力了。
作者: 小妹    时间: 2006-11-15 19:33
原帖由 namejm 于 2006-11-15 07:27 PM 发表
  难道 cd 不是内部命令?如果不是内部命令的话,那我就无能为力了。


还得麻烦您不辞劳苦.
作者: strongchen    时间: 2006-11-15 20:08
%CD% - 扩展到当前目录字符串。

%DATE% - 用跟 DATE 命令同样的格式扩展到当前日期。

%TIME% - 用跟 TIME 命令同样的格式扩展到当前时间。

%RANDOM% - 扩展到 0 和 32767 之间的任意十进制数字。

%ERRORLEVEL% - 扩展到当前 ERRORLEVEL 数值。

%CMDEXTVERSION% - 扩展到当前命令处理器扩展名版本号。

%CMDCMDLINE% - 扩展到调用命令处理器的原始命令行。

以上这些变量都是 cmd 环境下的,dos就无能为力了。
作者: namejm    时间: 2006-11-15 20:09
  我对纯DOS下的批处理十分陌生,也没有纯DOS环境可作试验。如果 cd 不是内部命令的话,可以试一下prompt——prompt应该是内部命令了吧?
  以下是 prompt 在XP下的帮助信息:

  1. 更改 cmd.exe 命令提示符。

  2. PROMPT [text]

  3.   text    指定新的命令提示符。

  4. 提示符可以由普通字符及下列特定代码组成:

  5.   $A   & (短 and 符号)
  6.   $B   | (管道)
  7.   $C   ( (左括弧)
  8.   $D   当前日期
  9.   $E   Escape code (ASCII 码 27)
  10.   $F   ) (右括弧)
  11.   $G   > (大于符号)
  12.   $H   Backspace (擦除前一个字符)
  13.   $L   < (小于符号)
  14.   $N   当前驱动器
  15.   $P   当前驱动器及路径
  16.   $Q    = (等号)
  17.   $S     (空格)
  18.   $T   当前时间
  19.   $V   Windows XP 版本号
  20.   $_   换行
  21.   $$   $ (货币符号)

  22. 如果命令扩展名被启用,PROMPT 命令会支持下列格式化字符:

  23.   $+   根据 PUSHD 目录堆栈的深度,零个或零个以上加号(+)字符;
  24.        每个被推的层有一个字符。

  25.   $M   如果当前驱动器不是网络驱动器,显示跟当前驱动器号或
  26.        空字符串有关联的远程名。
复制代码

作者: 小妹    时间: 2006-11-15 20:48
谢谢!

不过,怎样赋值啊?

echo %PROMPT $P%
显示也是空的
作者: namejm    时间: 2006-11-15 22:47
  没有纯DOS环境,没法测试,请试试如下代码:

  1. @echo off
  2. echo.|%comspec% /k prompt $p>test.txt
复制代码

作者: namejm    时间: 2006-11-16 10:03
原帖由 小妹 于 2006-11-15 07:21 PM 发表
谢谢  namejm  兄!

在 XP 系统下正常,但在 DOS 7.1 下,可能 %cd% 没取到值,所以

echo %cd%
echo %cd:~0,1%
echo %cd:~,2%
显示都是空的

还要麻烦您再想想办法,谢谢啦!


  今天看了一下DOS6.62下的内部命令,发现 cd 就是内部命令啊,不可能在 7.1 又被取消了吧?目前怀疑你的DOS7.1有问题。
作者: 小妹    时间: 2006-11-16 12:33
原帖由 namejm 于 2006-11-16 10:03 AM 发表


  今天看了一下DOS6.62下的内部命令,发现 cd 就是内部命令啊,不可能在 7.1 又被取消了吧?目前怀疑你的DOS7.1有问题。



好不容易在老同志那里找到几张启动软盘,

有 MS-DOS6.21、PC-DOS7.0、Win98、WinME

引导后,执行该"批处理文件",%cd% 仍显示空白

可能不是 DOS 本身的问题.
作者: namejm    时间: 2006-11-16 13:09
  那我就没办法了,实在不行,那我就只能怀疑你的电脑有问题了;如果还不是电脑的问题,那我就只好怀疑你的人品问题了^_^
作者: 小妹    时间: 2006-11-16 13:36
原帖由 namejm 于 2006-11-16 01:09 PM 发表
  那我就没办法了,实在不行,那我就只能怀疑你的电脑有问题了;如果还不是电脑的问题,那我就只好怀疑你的人品问题了^_^



不是吧? namejm 兄,别吓唬我,

不过,我找了一台尘封已久的、装有 Windows ME 的机子,进入它的  MS-DOS  方式,

echo %cd%  显示还是空白。

好像只有在  XP  里才正常?
作者: namejm    时间: 2006-11-17 13:12
  无论是 cd、echo 还是 prompt,都是纯DOS下的内部命令,居然连 echo %cd% 都是空白,那就错得有点离谱了,除了质疑程序的完整性和工作环境之外,我实在是没什么可以质疑的了,哪位再来找找原因吧。
作者: xypcmac    时间: 2006-11-17 13:38
echo %cd% 与 echo %prompt% 在纯dos只能 告诉你 echo is on(回显已经打开)!
建议用第三方程序完成...
作者: xypcmac    时间: 2006-11-17 13:49
在纯dos下面,系统自带的很多命令功能都是很弱的,包括 for、prompt、if ......
作者: 小妹    时间: 2006-11-27 18:54
顶起来
作者: freeapple    时间: 2006-11-28 16:28
又学到了




欢迎光临 无忧启动论坛 (http://bbs.wuyou.net./) Powered by Discuz! X3.3