我的 .bat 文件如下所示:
@echo off
CD /D "%~dp0"
if [%2]==[] (
set user=%USERNAME%
) else (
set user=%2%
)
:getFile
if [%1]==[] (
set /p file=Enter file name :
) else (
set file=%~f1
echo File name: %~f1
)
:checkFile
for /f "useback tokens=*" %%a in ('%file%') do set file=%%~a
if not exist "%file%" (
echo Error: Could not find file: %file%
echo.
)
:: Check for admin permissions
>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"
if '%errorlevel%' == '0' (
goto gotAdmin
)
:: Rerun this batch with admin rights
echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"
echo UAC.ShellExecute "cmd", "/c """"%~f0"" ""%file%"" ""%user%""""", "%CD%", "runas", 1 >> "%temp%\getadmin.vbs"
"%temp%\getadmin.vbs"
exit /B
:gotAdmin
if exist "%temp%\getadmin.vbs" ( del "%temp%\getadmin.vbs" )
pushd "%CD%"
CD /D "%~dp0"
echo.
:eof
pause
exit /B
我有这两个测试文件:
- C:\Test\Folder\feiru.txt
- C:\Test\furuダ\File.txt
当我运行上面的批处理文件并将 1 拖到 cmd 窗口时,我得到:
,这很好。
当我对 2 做同样的事情时,我得到:
当我调用 UAC.ShellExecute 时,%file% 未正确传递。
我该如何解决这个问题?
我使用管理员权限启动批处理文件的首选方法是创建快捷方式,然后将该快捷方式标记为需要管理员权限。
首先右键单击foo.bat,然后创建一个快捷方式。打开该快捷方式的属性,单击先进的…按钮并启用以管理员身份运行.
这有一个缺点:您无法将文件名拖到生成的命令提示符窗口上。但您可以将文件拖到快捷方式上。
但是如果我不想或不能使用快捷方式怎么办?
通过将文件名作为参数传递给脚本,您可以避免将任意 Unicode 字符写入文件。即使 VBS 文件采用 ANSI 编码,脚本宿主内部也始终使用 Unicode。
以下是编写 VBS 文件并运行它的方法:
:: Rerun this batch with admin rights
echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"
echo UAC.ShellExecute "cmd", "/c """"%~f0"" """ + Wscript.Arguments.Item(0) + """ ""%user%""""", "%CD%", "runas", 1 >> "%temp%\getadmin.vbs"
"%temp%\getadmin.vbs" "%file%"
exit /B
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)