【发布时间】:2012-04-30 21:54:02
【问题描述】:
我正在尝试在 Windows 上将长文件名转换为短文件名 (8.3)。
带有命令行参数的批处理文件按预期工作:
short.bat:
@echo OFF
echo %~s1
调用short.bat C:\Documents and Settings\User\NTUSER.DAT 返回C:\DOCUM~1\USER\NTUSER.DAT
但是,我不喜欢为此使用额外的 .bat 文件。我宁愿用 ruby 脚本中的整个命令调用cmd.exe。
我该怎么做?
作为中间步骤,我尝试对批处理文件中的路径进行硬编码,但这不起作用:
short1.bat:
@echo OFF
SET filename="C:\Documents and Settings\User\NTUSER.DAT"
echo %filename%
echo %~sfilename%
echo %filename% 有效,但echo %~sfilename% 给出以下错误:
The following usage of the path operator in batch-parameter
substitution is invalid: %~sfilename%
For valid formats type CALL /? or FOR /?
如果 short1.bat 有效,我如何将其转换为可以使用 cmd.exe \c ... 调用的单行代码?
还有一个问题 (how to get DOS path instead of Windows path),不过是专门询问当前目录的路径。
【问题讨论】:
-
我没有立即使用 Windows,但请尝试
%filename:~s%(类似于子字符串表示法的样式,%filename:~0,1%)。如果可行,我会给出答案。 -
@ChrisMorgan - 绝对不是。行不通。
-
@dbenham:不是吗?呃,好吧。值得一试。
-
为什么还需要短名称?这是遗留功能,除非绝对必要,否则最好避免使用。
-
@dbenham - 长文件名必须用引号括起来,这可能很难传递到 psexec 等常见例程中 - 请参阅 stackoverflow.com/questions/24905546/…
标签: windows batch-file command-line long-filenames short-filenames