相关疑难解决方法(0)

626
推荐指数
10
解决办法
101万
查看次数

使用cmd.exe将长文件名转换为短文件名(8.3)

我试图在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路径),但是那个问题是专门询问当前目录的路径.

windows command-line batch-file long-filenames short-filenames

30
推荐指数
2
解决办法
7万
查看次数

Java 调用 Windows API GetShortPathName

我想在我的 java 类中使用本机 windows api 函数。

我感兴趣的函数是 GetShortPathName。 http://msdn.microsoft.com/en-us/library/aa364989%28VS.85%29.aspx

我尝试使用这个 - http://dolf.trieschnigg.nl/eightpointthird/eightpointthird.html 但在某些情况下,当我使用它时,java会完全崩溃,所以它不是我的选择。

问题是我是否必须用 C 语言编写代码,制作 DLL,然后在 JNI/JNA 中使用该 DLL?或者也许我可以以不同的方式访问系统 API?

我会感谢您的评论。如果您可以发布一些代码作为示例,我将不胜感激。

...

我使用 JNA 找到了答案



import com.sun.jna.Native;
import com.sun.jna.platform.win32.Kernel32;

public class Utils {

    public static String GetShortPathName(String path) {
        byte[] shortt = new byte[256];

        //Call CKernel32 interface to execute GetShortPathNameA method
        int a = CKernel32.INSTANCE.GetShortPathNameA(path, shortt, 256);
        String shortPath = Native.toString(shortt);
        return shortPath;

    }

    public interface CKernel32 extends Kernel32 {

        CKernel32 INSTANCE = (CKernel32) Native.loadLibrary("kernel32", CKernel32.class);

        int GetShortPathNameA(String LongName, …
Run Code Online (Sandbox Code Playgroud)

java winapi short-filenames

4
推荐指数
1
解决办法
2237
查看次数