无忧启动论坛

标题: 奇怪的命令 [打印本页]

作者: shuini    时间: 2022-9-17 09:03
标题: 奇怪的命令
这样一条命令:echo %~d0
直接在cmd中运行,回显成 %~d0
用bat运行,回显是 C:
何故?

作者: shuini    时间: 2022-9-17 09:06
本帖最后由 shuini 于 2022-9-17 09:21 编辑

难道(聪明的)CMD把路径当作字符串了?肯定不会的。但就是不明白是什么道理。

作者: szwp    时间: 2022-9-17 09:22
将bat放d盘里测
作者: shuini    时间: 2022-9-17 09:37
szwp 发表于 2022-9-17 09:22
将bat放d盘里测

能正确运行
作者: nttwqz    时间: 2022-9-17 09:42
  1.   %0指批处理本身

  2.   批参数(%n)的替代已被增强。你可以使用以下语法:

  3.       %~0         - 删除引号("),扩展 %0
  4.       %~f0        - 将 %0 扩展到一个完全合格的路径名
  5.       %~d0        - 仅将 %0 扩展到一个驱动器号
  6.       %~p0        - 仅将 %0 扩展到一个路径
  7.       %~n0        - 仅将 %0 扩展到一个文件名
  8.       %~x0        - 仅将 %0 扩展到一个文件扩展名
  9.       %~s0        - 扩展的路径只含有短名
  10.       %~a0        - 将 %0 扩展到文件属性
  11.       %~t0        - 将 %0 扩展到文件的日期/时间
  12.       %~z0        - 将 %0 扩展到文件的大小
  13.       %~$PATH:0   - 查找列在 PATH 环境变量的目录,并将 %0
  14.                     扩展到找到的第一个完全合格的名称。如果
  15.                     环境变量名未被定义,或者没有找到文件,
  16.                     此修改符会扩展到空字符串

  17. 可以组合修改符来取得多重结果:

  18.      %~dp0       - 只将 %0 扩展到驱动器号和路径
  19.      %~nx0       - 只将 %0 扩展到文件名和扩展名
  20.      %~dp$PATH:0 - 在列在 PATH 环境变量中的目录里查找 %0,
  21.                    并扩展到找到的第一个文件的驱动器号和路径。
  22.      %~ftza0     - 将 %0 扩展到类似 DIR 的输出行。
复制代码

作者: szwp    时间: 2022-9-17 09:52
不想要C不放C盘
作者: shuini    时间: 2022-9-17 09:58
窄口牛 发表于 2022-9-17 09:44
没啥奇怪的哇,这个就是批处理里面的cmd里他就没意义。
批处理的变量是两个%%,cmd里只需要一个%,这个本 ...

也就是说,直接用命令让cmd回显出%~d0的变量值是没戏的?
作者: shuini    时间: 2022-9-17 10:00
szwp 发表于 2022-9-17 09:52
不想要C不放C盘

是要在CMD里回显出这个变量值,不管是C还是D或者其他。
作者: bfgxp    时间: 2022-9-17 10:17
二楼的回答说得很清楚了,%0表示批处理本身,你在cmd窗口中直接输入,%0表示的批处理文件本身在哪里?
作者: 2010techon    时间: 2022-9-17 10:49
shuini 发表于 2022-9-17 10:00
是要在CMD里回显出这个变量值,不管是C还是D或者其他。

cmd 命令行里可以用
echo %CD:~,3%
作者: szwp    时间: 2022-9-17 11:05
知道0表示什么么?
作者: hilsonma    时间: 2022-9-17 12:51
%~d0 表示%0中的驱动器号
%0、%1、%2... 等等是批处理的运行参数
%0 是批处理的文件名路径本身(全路径,包含驱动器号开始直到处理文件扩展名为止)
%1 是批处理的第1个参数
...

所以你直接在cmd命令行中使用 %~d0 是没有意义的,会识别为单纯的字串,在批处理中才会识别为变量。
作者: shuini    时间: 2022-9-17 15:40
已解决,谢谢各位。
作者: szwp    时间: 2022-9-17 16:02
shuini 发表于 2022-9-17 10:00
是要在CMD里回显出这个变量值,不管是C还是D或者其他。

先得知道0表示什么,1表示什么
作者: bjay2008xmy    时间: 2022-9-17 22:09
提示: 作者被禁止或删除 内容自动屏蔽
作者: vbfgj    时间: 2022-9-19 14:40
nttwqz 发表于 2022-9-17 09:42

高手
作者: hsis872    时间: 2023-5-25 21:26
nttwqz 发表于 2022-9-17 09:42

很详细,谢谢分享

作者: yyz2191958    时间: 2023-6-13 17:41
进来学习
作者: shy20070509    时间: 2023-6-13 17:55
环境不同,执行结果不同
作者: nowayer    时间: 2023-11-26 05:38
提示: 作者被禁止或删除 内容自动屏蔽




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