windows - 重新运行时将 Unicode 参数传递给 Windows .bat 文件

标签 windows batch-file unicode dos

我的 .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

我有这两个测试文件:

  1. C:\Test\Folder\ファイル.txt
  2. C:\Test\フォルド\File.txt

当我运行上面的批处理文件并将 1 拖到 cmd 窗口时,我得到:

enter image description here

,这很好。

当我对 2 执行相同操作时,我得到:

enter image description here

当我调用 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

关于windows - 重新运行时将 Unicode 参数传递给 Windows .bat 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31069891/

相关文章:

windows - 将文件输出存储到变量中

angular - 批处理文件运行 npm start

.net - 我应该在 dllimport 中使用 Ansi 还是 Unicode 字符集?

javascript - 在旧浏览器中显示表情符号

windows - 如何挂接到 Windows 网络事件

python - 安装mysql-python时"Cannot open include file: ' config-win.h ': No such file or directory"

batch-file - 如何获取通用 Windows 批处理文件时间戳

windows - 当 dll 在 system32 中时,程序在我的系统上找不到 dll

windows - mod_rewrite 是否也适用于 Windows 服务器?

Java String->unicode->字符串转换不一致