[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

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

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

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

本帖最后由 aloha20200628 于 2025-2-19 09:15 编辑

回复 1# zghk

以下批处代码首先检测当前是否为已提权状态,是,则转到 :gotAdm 代码段;否,则即时生成用于提权的 vbs 脚本(用后删除并退出),被传送的脚本路径和命令行参数可同时包含空格(即均可被双引号包裹)
另注》拖入文件作为命令行参数时须确保那些未含空格的文件路径不能有 &^(=) 等特殊字符...
  1. @echo off &fltmc>nul 2>&1
  2. if %errorlevel% equ 0 goto :gotAdm
  3. set v=%*
  4. setlocal enabledelayedexpansion &set "vl="
  5. for %%v in (!v!) do set vl=!vl! ""%%~v""
  6. set vl=/c "" ""%~f0"" !vl! ""
  7. set/p="CreateObject("Shell.Application").ShellExecute "cmd.exe", "!vl!", "", "runas", 1"<nul>"%temp%\getadmin.vbs"
  8. "%temp%\getadmin.vbs"
  9. del /q "%temp%\getadmin.vbs" &exit/b
  10. :gotAdm
  11. echo,已获得管理员身份...
  12. ::以下是提权后才可操作的代码
  13. :: ....
  14. ::以上是提权后才可操作的代码
  15. pause&exit/b
复制代码

TOP

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

TOP

返回列表