标题: [文件操作] BAT中%%~si 产生的文件短名并不可信 [打印本页]
作者: 523066680 时间: 2013-8-11 20:27 标题: BAT中%%~si 产生的文件短名并不可信
补充备注,平台 : xp
使用短名大多是因为某些文件名不太好处理,特别是名字包含这些符号的时候: () & = !! %%,
这两天做比赛第九题,却碰了个这样的钉子:(后来改用别的方法,细节掠过 瞎折腾没意思)
在某个磁盘建立以下文件目录,(如果两级目录都采用纯中文或者纯英文,是不会出现这种情况的)
D:\错误实例test\复件 a\
新建一个批处理,取名"shortname.bat":- @echo off
- for %%a in (*) do (
- echo "%%a"
- echo "%%~snxa"
- echo "%%~fsa"
- )
- pause
复制代码
输出结果:
"shortname.bat"
"shortname.batat"
"D:\错误实~1\复件A~1\shortname.batat"
请按任意键继续. . .
这个时候如果 copy "%%~fsa" 到某个目录,将提示无法找到文件。
另外,dir /x产生的短名没有这个问题
作者: gawk 时间: 2013-8-11 20:58
Win7用户表示鸭梨不大
e:\>md "E:\错误实例test\复件 a\"
e:\>cd "E:\错误实例test\"
E:\错误实例test>type test.bat
@echo off
for %%a in (*) do (
echo "%%a"
echo "%%~snxa"
echo "%%~fsa"
)
E:\错误实例test>test.bat
"test.bat"
"test.bat"
"E:\错误实~1\test.bat"
作者: 523066680 时间: 2013-8-11 21:16
回复 2# gawk
作者: 523066680 时间: 2013-8-12 08:50
回复 2# gawk
今早上一看,位置不对。
你要在 "复件 a" 里面放批处理,然后双击执行看看。
作者: apang 时间: 2013-8-12 10:35
看高人们的总结,受益非浅:
http://www.bathome.net/viewthrea ... p;extra=&page=1
作者: 523066680 时间: 2013-8-12 12:04
回复 5# apang
翻了一下,原来寂寞哥(jm)做过总结啊
http://www.cn-dos.net/forum/viewthread.php?tid=27063
作者: gawk 时间: 2013-8-12 23:27
回复 4# 523066680
双击执行没有问题
E:\错误实例test\复件 a\test.bat
"test.bat"
"test.bat"
"e:\错误实~1\复件A~1\test.bat"
Press any key to continue . . .- @echo off
- echo %~f0
- for %%a in (*) do (
- echo "%%a"
- echo "%%~snxa"
- echo "%%~fsa"
- )
- pause
复制代码
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |