
标题: [文件操作] 求助批处理拖入文件作为参数的引号处理 [打印本页]
作者: zghk 时间: 4 天前 22:57 标题: 求助批处理拖入文件作为参数的引号处理
- :UACPrompt
- echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"
- echo UAC.ShellExecute "%~s0", "%*", "", "runas", 1 >> "%temp%\getadmin.vbs"
- "%temp%\getadmin.vbs"
- exit /B
复制代码
这里有一段批处理代码,用于将多个字体安装到系统字体目录,因为要进行提权,所以使用了vbs脚本辅助
但在文件路径的格式上,文件名没有空格的,不会加引号,有空格的,会自动加上引号。
导致在写入vbs文件时,不能对 %* 中的文件路径格式进行统一处理,要么脚本出错,要么文件名被空格分割了
请问用什么方法可以正确处理这个问题
作者: aloha20200628 时间: 4 天前 23:42
本帖最后由 aloha20200628 于 2025-2-19 09:15 编辑
回复 1# zghk
以下批处代码首先检测当前是否为已提权状态,是,则转到 :gotAdm 代码段;否,则即时生成用于提权的 vbs 脚本(用后删除并退出),被传送的脚本路径和命令行参数可同时包含空格(即均可被双引号包裹)
另注》拖入文件作为命令行参数时须确保那些未含空格的文件路径不能有 &^(=) 等特殊字符...- @echo off &fltmc>nul 2>&1
- if %errorlevel% equ 0 goto :gotAdm
- set v=%*
- setlocal enabledelayedexpansion &set "vl="
- for %%v in (!v!) do set vl=!vl! ""%%~v""
- set vl=/c "" ""%~f0"" !vl! ""
- set/p="CreateObject("Shell.Application").ShellExecute "cmd.exe", "!vl!", "", "runas", 1"<nul>"%temp%\getadmin.vbs"
- "%temp%\getadmin.vbs"
- del /q "%temp%\getadmin.vbs" &exit/b
- :gotAdm
- echo,已获得管理员身份...
- ::以下是提权后才可操作的代码
- :: ....
- ::以上是提权后才可操作的代码
- pause&exit/b
复制代码
作者: zghk 时间: 3 天前 09:53
回复 2# aloha20200628
太棒了,完美解决了纠结很长时间的问题。
我是有Cursor来帮我生成的一个批量安装字体的脚本,但是试过很多次都没能帮我解决这个处理参数的问题。
楼主的这段脚本一次性就解决了这个痛点。
看来AI生成代码还是有一定局限,或者说这可能是一个很小众的要求,AI还没有代码可参考。
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |