我试图在Windows上将长文件名转换为短文件名(8.3)。
具有命令行参数的batch file按预期工作:
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
。 我怎样才能做到这一点?
作为一个中间步骤,我尝试在batch file中硬编码path,但这不起作用:
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 ...
调用的单行程 ?
还有一个问题( 如何得到DOSpath,而不是Windowspath ),但是那个是特别要求当前目录的path。
cmd /c for %A in ("C:\Documents and Settings\User\NTUSER.DAT") do @echo %~sA
将filename.txt替换为要转换为8.3的文件名
dir /x filename.txt
然后你将不得不用空格作为你的分隔符(正则表达式中的\ s)分割结果。 那么〜的值就是你的短文件名。 如果你的文件名很短,那么你将不会找到一个包含〜的字符串。