DOS BAT 文件相当于 Unix basename 命令?
有没有一种简单的方法可以使用 DOS BAT 命令语言获取 DOS 文件名的基本名称(不带扩展名的文件名)?
我同意:format c:\
可能是一个好的开始,然后是可启动的 Linux CD(假设这些古董机器有 CD 阅读器 - 不是给定的)。但让我们假设我们只有 DOS...(这意味着:没有 Windows - 甚至没有 Windows 3.1,更不用说 Windows 95、98、NT、ME、XP、Vista、7 等)
Is there an easy way to get to the basename (file name without extension) of a DOS file name using the DOS BAT command language?
I agree: format c:\
is probably a good start, followed by a bootable Linux CD (assuming these antique machines have a CD reader - not a given). But let's pretend that we only have DOS... (That means: not Windows - not even Windows 3.1, let alone Windows 95, 98, NT, ME, XP, Vista, 7, etc.)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(8)
对于命令行
对于.bat 文件
输出:
bar
如果路径包含空格,请添加
"delims=" 像这样:
输出:
bar baz
(进一步阅读:
http://www.computerhope.com/forhlp.htm )
For command-line
For .bat Files
output:
bar
If the path contains a space, add in
"delims="
like so:output:
bar baz
(Further Reading:
http://www.computerhope.com/forhlp.htm )
扩展 hobodave 和 ars的答案,这是来自的相关帮助片段
for
命令:To expand on hobodave's and ars's answers, here's the relevant snippet of help from the
for
command:我明白“你不能”的答案还不够好。因此,如果确实/必须/在实模式 DOS 中完成,则获取 4DOS 命令 shell 和随附程序并使用它而不是 COMMAND.COM
http://www.4dos.info/v4dos.htm
我已经很多年没有使用它了,但它总是/远远/比 COMMAND.COM 如果你搜索这个页:
http://www.4dos.info/4batfaq.htm
对于“basename”,如果使用 COMMAND.COM 的 4DOS /instead/,您将看到有一个实模式 DOS 答案来解决您的问题。
我能想到的唯一其他解决方案路径是查找或编写执行 basename 的实模式 .exe。
COMMAND.COM,即使在 DOS 6.22 及其所有支持的外部命令中,对于脚本/批处理文件来说始终是一个极其严重的系统。请注意,MinGW32 命令行程序没有任何帮助。所有这些内容都是针对保护模式(32 位 Windows)的。如果您在 DOS 下尝试,您只会得到神秘的“此程序无法在 DOS 模式下运行”。或类似的东西。
I understand that the answer "you can't" is not good enough. So, if it really /has/ to be done in Real Mode DOS, then get the 4DOS command shell and accompanying programs and use it instead of COMMAND.COM
http://www.4dos.info/v4dos.htm
I haven't used it in years, but it was always /far/ better than COMMAND.COM If you search this page:
http://www.4dos.info/4batfaq.htm
for "basename" you will see there is a Real Mode DOS answer to your problem if using 4DOS /instead/ of COMMAND.COM
The only other solution path I can think of is to find or write a Real Mode .exe that performs basename.
COMMAND.COM, even in DOS 6.22 with all its supporting external commands, was always an incredibly crippled system for scripts/batch files. Note that the MinGW32 command line progs will be of no help. All that stuff is for Protected Mode (32 bit Windows). If you try it in DOS you'll just get the cryptic "This program cannot be run in DOS mode." or something similar.
完整工作解决方案(即使路径包含空格)
.bat 文件中的
命令提示符中的 使用
%
代替%%
(感谢@Ciantic)
Full-working solution (even when path contains spaces)
in .bat files
in command-prompt use
%
instead of%%
(thanks to @Ciantic)
此外,MKS 工具包还有一个基本名称实用程序...
http://www.mkssoftware.com/docs/man1/basename.1.asp" rel="nofollow noreferrer">http://www.mkssoftware.com mkssoftware.com/docs/man1/basename.1.asp
Also, the MKS Toolkit has a basename util...
http://www.mkssoftware.com/docs/man1/basename.1.asp
DOS 6.22 不支持 for 批处理语句中的 %~nI。这是我在关于 isql 4.10 bcheck 实用程序仅需要基本名称的原始问题中提出的问题的解决方法,而在 isql 2.10 bcheck 实用程序中使用 star.star 作为参数。我创建了以下 QBASIC 程序来解决 bcheck 4.10 现在只需要一个基本名称即可工作:
或者,可以编写一个 ACE 程序来从 systables.dirpath 中提取基本名称并打印“BCHECK -y”,systables.dirpath
DOS 6.22 does not support %~nI in for batch statements. here's a workaround to the problem I presented in my original question about isql's 4.10 bcheck utility requiring only a basename whereas in isql 2.10 bcheck utility worked with star.star as an argument. I created the following QBASIC program to solve bcheck 4.10 now requiring only a basename to work:
OR, one can write an ACE program to extract the basename from systables.dirpath and PRINT "BCHECK -y ",systables.dirpath
根据 hobodave 接受的答案,这里介绍了如何使用该命令在批处理文件中设置变量:
它使用第一个命令行参数 %1,并将变量 FN 设置为等于基本名称(例如 file.txt) 。
Based on the accepted answer from hobodave here is how you can use the command to set a variable in a batch file:
It uses the first command line argument %1, and sets the variable FN equal to the basename (file.txt for example).
在FOR循环命令中,可以使用
%%~n
。In the FOR loop command, you can use
%%~n
.