use*_*007 30 windows command-line batch-file long-filenames short-filenames
我试图在Windows上将长文件名转换为短文件名(8.3).
带有命令行参数的批处理文件按预期工作:
short.bat:
@echo OFF
echo %~s1
Run Code Online (Sandbox Code Playgroud)
调用short.bat C:\Documents and Settings\User\NTUSER.DAT返回C:\DOCUM~1\USER\NTUSER.DAT
但是,我不喜欢为此添加额外的.bat文件.我宁愿cmd.exe用ruby脚本调用整个命令.我怎样才能做到这一点?
作为中间步骤,我尝试对批处理文件中的路径进行硬编码,但这不起作用:
short1.bat:
@echo OFF
SET filename="C:\Documents and Settings\User\NTUSER.DAT"
echo %filename%
echo %~sfilename%
Run Code Online (Sandbox Code Playgroud)
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 /?
Run Code Online (Sandbox Code Playgroud)
如果short1.bat工作,我如何将其转换为可以调用的单行cmd.exe \c ...?
还有另一个问题(如何获取DOS路径而不是Windows路径),但是那个问题是专门询问当前目录的路径.
dbe*_*ham 42
cmd /c for %A in ("C:\Documents and Settings\User\NTUSER.DAT") do @echo %~sA
Run Code Online (Sandbox Code Playgroud)
将filename.txt替换为要转换为8.3的文件名
dir /x filename.txt
Run Code Online (Sandbox Code Playgroud)
然后,您将不得不使用空格作为分隔符来分割结果(正则表达式中的\ s)。然后,带有〜的值就是您的短文件名。如果您的文件名开头很短,那么您将找不到包含〜的字符串。
| 归档时间: |
|
| 查看次数: |
69006 次 |
| 最近记录: |