gpt4 book ai didi

windows - 批处理参数 %~s1 给出了错误的 8.3 短名称

转载 作者:可可西里 更新时间:2023-11-01 13:07:25 24 4
gpt4 key购买 nike

我正在尝试在 Windows XP 中编写一个批处理文件,该文件采用完全限定的路径名​​并输出 8.3 短名称版本...

@echo off
echo "%~s1"

我遇到过一个特殊情况,输出的路径和文件不正确...

C:\>test.bat "C:\Documents and Settings\angus\Local Settings\Temporary Internet Files\Content.IE5\2JSTM34V\62[1].ja2"
"C:\DOCUME~1\angus\LOCALS~1\TEMPOR~1\Content.IE5\2JSTM34V\62_1_~1.JA2M34V\62[1].ja2"

注意上面的输出("C:\DOCUME~1\angus\LOCALS~1\TEMPOR~1\Content.IE5\2JSTM34V\62_1_~1.JA2M34V\62[1].ja2")不存在.但是,如果我从该输出中删除“.JA2M34V\62[1]”部分,则生成的字符串将是原始输入文件的有效路径。

这似乎是文件名中使用方括号 ([]) 的问题。如果我在同一目录中创建文件 62.ja2,输出将是正确的...

C:\>test.bat "C:\Documents and Settings\angus\Local Settings\Temporary Internet Files\Content.IE5\2JSTM34V\62.ja2"
"C:\DOCUME~1\angus\LOCALS~1\TEMPOR~1\Content.IE5\2JSTM34V\62.ja2"

这是 Windows 中的错误吗?有人知道是否有允许批处理文件正确处理此文件名的解决方法吗?

最佳答案

这不是您代码中的错误,这是 XP 的错误!
在 Vista 中,同样的代码可以工作。

它看起来像是一种缓冲区损坏。
这取决于最后一个目录名的长度,最后一个字符被复制到“短名称”。

只有当文件名中有一个或多个 [];,+=<space> 字符时才会发生

一个简短的测试用例

@echo off
setlocal EnableDelayedExpansion
set myDir=
set myFile=a[1].bat
set map=123456789ABCDEFGHIJKLMNOPQRSTUVW

for /L %%n in (0 1 26) do (
set "myDir=!myDir!!map:~%%n,1!"
md !myDir!
echo dummy > "!myDir!\!myFile!"
echo Dir=!myDir!
for %%X in ("!myDir!\!myFile!") do echo %%~sX
echo(
del "!myDir!\!myFile!" > nul
rd !myDir!
)

最后一行的结果

Dir=123456789A
C:\Projekte\batch\123456~1\A_1_~1.BAT

Dir=123456789AB
C:\Projekte\batch\123456~1\A_1_~1.BATt

Dir=123456789ABC
C:\Projekte\batch\123456~1\A_1_~1.BATat

Dir=123456789ABCD
C:\Projekte\batch\123456~1\A_1_~1.BATbat

Dir=123456789ABCDE
C:\Projekte\batch\123456~1\A_1_~1.BAT.bat

Dir=123456789ABCDEF
C:\Projekte\batch\123456~1\A_1_~1.BAT].bat

Dir=123456789ABCDEFG
C:\Projekte\batch\123456~1\A_1_~1.BAT1].bat

Dir=123456789ABCDEFGH
C:\Projekte\batch\123456~1\A_1_~1.BAT[1].bat

Dir=123456789ABCDEFGHI
C:\Projekte\batch\123456~1\A_1_~1.BATa[1].bat

Dir=123456789ABCDEFGHIJ
C:\Projekte\batch\123456~1\A_1_~1.BAT\a[1].bat

Dir=123456789ABCDEFGHIJK
C:\Projekte\batch\123456~1\A_1_~1.BATK\a[1].bat

Dir=123456789ABCDEFGHIJKL
C:\Projekte\batch\123456~1\A_1_~1.BATKL\a[1].bat

Dir=123456789ABCDEFGHIJKLM
C:\Projekte\batch\123456~1\A_1_~1.BATKLM\a[1].bat

Dir=123456789ABCDEFGHIJKLMN
C:\Projekte\batch\123456~1\A_1_~1.BATKLMN\a[1].bat

Dir=123456789ABCDEFGHIJKLMNO
C:\Projekte\batch\123456~1\A_1_~1.BATKLMNO\a[1].bat

Dir=123456789ABCDEFGHIJKLMNOP
C:\Projekte\batch\123456~1\A_1_~1.BATKLMNOP\a[1].bat

Dir=123456789ABCDEFGHIJKLMNOPQ
C:\Projekte\batch\123456~1\A_1_~1.BATKLMNOPQ\a[1].bat

Dir=123456789ABCDEFGHIJKLMNOPQR
C:\Projekte\batch\123456~1\A_1_~1.BATKLMNOPQR\a[1].bat

关于windows - 批处理参数 %~s1 给出了错误的 8.3 短名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8354305/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com