【AnswerBat】【论如何正确地】处理 %~1 及 %~0 中的特殊字符
bat吧
全部回复
仅看楼主
level 13
set "a=%~fs1"
setlocal enabledelayedexpansion
for /f "delims=" %%c in ("!a:~!") do (
endlocal
set "a=%%~nxc"
)
setlocal enabledelayedexpansion
echo !a!
endlocal
引用 @ldl383 (https://tieba.baidu.com/f?ct=335675392&tn=baiduPostBrowser&z=3989548833&sc=76823577902#76823577902,提问楼 https://tieba.baidu.com/p/3989548833 的 第66楼)
问:%1、%0怎样处理如何才能两全其美
能打开一种情况的是扩展延迟,加上
set "a=%~fs1"
echo !a!
另一种是直接上
前者能解决&的问题,后者能解决!的问题,合并在一块没法用。。。。。。
神啊!!!赐予我解决方法吧。。。程序都搁置一个月了。。。。。。。。
———————————————————————————
我本来说的是思路,看到你这么回复,只好自己写了一个 demo 。
2015年10月04日 12点10分 1
level 13
启用引用脚本后似乎不能显示前面的内容,为自己方便:
set "a=%~fs1"
setlocal enabledelayedexpansion
for /f "delims=" %%c in ("!a:~!") do (
endlocal
set "a=%%~nxc"
)
setlocal enabledelayedexpansion
echo !a!
endlocal
2015年10月04日 12点10分 2
level 13
备注:这个会过滤掉反斜杠,不然 %~fs1 扩展时会把当前路径带进去。
2015年10月04日 12点10分 3
正斜杠也会
2015年10月04日 12点10分
level 8
虽然看不懂,还是顶辣
2015年10月05日 01点10分 4
其实就是处理参数。
2015年10月05日 02点10分
level 14
2015年10月05日 03点10分 5
这个只是消除特殊符号的影响,反而不能出现路径里面的斜杠,只能用 Unix 式的 - 传递参数了。 ---贴吧极速版 For UWP
2015年10月05日 04点10分
@贴吧用户_0KSaNSR [滑稽]你去写一个第三方用于获取批处理的参数并分割好
2015年10月05日 04点10分
回复 aiwozhonghuaba : 不会编程。 ---贴吧极速版 For UWP
2015年10月05日 07点10分
level 13
引用 @ldl383 (6楼)
谢谢。。。虽然不能解决全部问题。。但是能解决大部分问题bat也是很厉害了
[还是没解决&的问题。。。]
———————————————————————————
原来很简单
set "a=%~1"
setlocal enabledelayedexpansion
echo !a!
2015年10月05日 07点10分 12
level 13
引用 @ldl383 (6楼)
谢谢。。。虽然不能解决全部问题。。但是能解决大部分问题bat也是很厉害了
[还是没解决&的问题。。。]
———————————————————————————
处理全部参数的测试
:loop
set a=
set "a=%~1"
if not defined a exit /b
setlocal enabledelayedexpansion
echo !a!
endlocal
shift
goto loop
2015年10月05日 07点10分 13
level 13
引用 @ldl383 (14楼)
setlocal enabledelayedexpansion
echo %cmdcmdline%
@set "l=!cmdcmdline!"
@set "a="%~0""
@set "b=!cmdcmdline:%a%=!"
@set "c=!b:cmd /c =!"
@set "baifenzhixing=!c:~2,-1!"
@echo !baifenzhixing!
::@echo 仅限于一个参数
::notepad !baifenzhixing!
@echo.
@echo 包含%%0的(%%0带引号)
@set "d=!l:cmd /c =!"
@set "baifenzhixingwz=!d:~1,-1!"
@echo !baifenzhixingwz!
@pause
//在这里开始,for循环的问题
set /a num=-1
for %%i in (!baifenzhixingwz!) do (
set /a num=!num!+1
set "bai%%num%%=%%~i"
)
echo !bai1!
echo !bai0!
pause
。。。。。。。我就卡在这里了。。。
———————————————————————————
set argc=0
:check
set "argv[argc]=%~0"
if not defined argv[argc] goto done
shift
goto check
:done
::Do sth.
2015年10月05日 09点10分 15
level 13
引用 @这不是随便取的 (15楼)
set argc=0
:check
set "argv[argc]=%~0"
if not defined argv[argc] goto done
shift
goto check
:done
::Do sth.
———————————————————————————
改为
set argc=0
:check
set "argv[argc]=%~0"
if not defined argv[argc] goto done
shift
set /a argc+=1
goto check
:done
::Do sth.
2015年10月05日 09点10分 16
@- 原来也不是那么麻烦。
2015年10月05日 10点10分
1