07-23-2023, 12:39 AM
I am trying to convert a long filename to a short filename (8.3) on Windows.
A batch-file with a command line argument works as intended:
*short.bat*:
@echo OFF
echo %~s1
calling `short.bat C:\Documents and Settings\User\NTUSER.DAT` returns ` C:\DOCUM~1\USER\NTUSER.DAT`
However, I don't like having an extra .bat-file for this. I would rather call `cmd.exe` with the whole command from a ruby script.
How can I do this?
As an intermediate step I tried to hardcode the path in the batch-file, but that does not work:
*short1.bat*:
@echo OFF
SET filename="C:\Documents and Settings\User\NTUSER.DAT"
echo %filename%
echo %~sfilename%
`echo %filename%` works, but `echo %~sfilename%` gives the following error:
The following usage of the path operator in batch-parameter
substitution is invalid: %~sfilename%
For valid formats type CALL /? or FOR /?
If *short1.bat* works, how can I convert this into a one-liner that can be called with `cmd.exe \c ...`?
There is another question (
A batch-file with a command line argument works as intended:
*short.bat*:
@echo OFF
echo %~s1
calling `short.bat C:\Documents and Settings\User\NTUSER.DAT` returns ` C:\DOCUM~1\USER\NTUSER.DAT`
However, I don't like having an extra .bat-file for this. I would rather call `cmd.exe` with the whole command from a ruby script.
How can I do this?
As an intermediate step I tried to hardcode the path in the batch-file, but that does not work:
*short1.bat*:
@echo OFF
SET filename="C:\Documents and Settings\User\NTUSER.DAT"
echo %filename%
echo %~sfilename%
`echo %filename%` works, but `echo %~sfilename%` gives the following error:
The following usage of the path operator in batch-parameter
substitution is invalid: %~sfilename%
For valid formats type CALL /? or FOR /?
If *short1.bat* works, how can I convert this into a one-liner that can be called with `cmd.exe \c ...`?
There is another question (
[To see links please register here]
), however that one is specifically asking for the path of the current directory.