返回列表 发帖

[文件操作] 求助批处理拖入文件作为参数的引号处理

:UACPrompt
    echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"
    echo UAC.ShellExecute "%~s0", "%*", "", "runas", 1 >> "%temp%\getadmin.vbs"
    "%temp%\getadmin.vbs"
    exit /BCOPY
这里有一段批处理代码,用于将多个字体安装到系统字体目录,因为要进行提权,所以使用了vbs脚本辅助
但在文件路径的格式上,文件名没有空格的,不会加引号,有空格的,会自动加上引号。
导致在写入vbs文件时,不能对 %* 中的文件路径格式进行统一处理,要么脚本出错,要么文件名被空格分割了

请问用什么方法可以正确处理这个问题

本帖最后由 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/bCOPY

TOP

回复 2# aloha20200628
太棒了,完美解决了纠结很长时间的问题。
我是有Cursor来帮我生成的一个批量安装字体的脚本,但是试过很多次都没能帮我解决这个处理参数的问题。
楼主的这段脚本一次性就解决了这个痛点。
看来AI生成代码还是有一定局限,或者说这可能是一个很小众的要求,AI还没有代码可参考。

TOP

返回列表