批处理脚本中%~s1与%~fs1的区别及演示方法
批处理中%s1与%fs1的区别及演示
1. 二者的核心区别
- %~s1:仅对输入参数做短路径转换,会保留原参数的路径类型(相对路径/绝对路径)。如果原参数是相对路径,转换后依然是相对的短路径;如果是绝对路径,结果就是绝对短路径。
- %~fs1:先将输入参数解析为绝对路径,再转换为短路径格式。无论原参数是相对还是绝对路径,最终输出的都是绝对短路径。
你之前的测试用了绝对路径作为参数,所以两者输出一致,看不出差异。
2. 演示区别的批处理脚本
可以通过传递相对路径参数来直观展示差异,示例脚本如下:
@echo off :: 先切换到目标目录的上级目录 cd /d "D:\ThisIsBatchDirectoryWithLongPath" :: 用相对路径调用方法 call :Method "UsersBatchSubdirectory" exit /b :Method echo 原参数:%~1 echo %%~s1 输出:%~s1 echo %%~fs1 输出:%~fs1 exit /b
输出结果示例
原参数:UsersBatchSubdirectory %~s1 输出:USERSB~1 %~fs1 输出:D:\THISIS~1\USERSB~1
这里能明显看到:%s1输出的是相对短路径,而%fs1输出的是完整的绝对短路径。
你也可以用更复杂的相对路径(比如..\SomeOtherLongDir)测试,结果同样会体现出两者的差异:%s1保留相对结构的短路径,%fs1则输出对应的绝对短路径。
内容的提问来源于stack exchange,提问作者Jo Omer
相关产品推荐
相关产品推荐

