私は通常のバッチスクリプトプログラマーではないので、これは少しばかげているように聞こえるかもしれません。
文字列内の環境変数を展開し、最終的に展開された出力を別の変数に格納するには、次のようにします。
@echo off
set P1="%SYSTEMROOT%\Temp"
echo %%P1%%
これにより、終了する前に「C:\ Windows\Temp」が出力されます。また、最初にスクリプトをadminに昇格させてから、以下のように同じコードを実行した場合にも、これは機能するはずです。
@echo off
net file 1>nul 2>nul && goto :RunAsAdmin^
|| powershell -ex unrestricted -Command "Start-Process -Verb RunAs -FilePath '%comspec%' -ArgumentList '/c %~fnx0 %*'"
goto :eof
:RunAsAdmin
set P1="%systemroot%\Temp"
echo %%P1%%
上記と同じ出力を出力する必要があります。誰かが私がここで間違っていることを理解するのを手伝ってくれる?
P.S.変数でパスを宣言し、次のような次のコマンドで変数を再利用することで、システムの一時ディレクトリをスマートにクリアできるようにしたいので、これを尋ねました。
set P1="%systemroot%\Temp" && del /f /s /q %%P1%%\*.* && rd /s /q %%P1%%\*
1)%comspec%
+-ArgumentList '/c
+%~fnx0 %
から:
Start-Process $env:windir\system32\cmd.exe -Verb RunAs -Argument $env:cmd_arg
2)powershellコマンドは引用符を必要としないので、引用符を削除してください
%__APPDIR__%\WindowsPowerShell\v1.0\powershell.exe -ex unrestricted -Command Start-Process $env:windir\system32\cmd.exe -Verb RunAs -Argument $env:cmd_arg
3)'/c %~fnx0 %*'
から引用符/半引用符を削除し、$env:cmd_arg
に置き換えます。
4)%%P1%%
の場合は、次を使用してみてください。
cmd /v /c "echo !P1!"
call echo/ %P1%
echo/ %P1%
echo= %P1%
echo[ %P1%
echo( %P1%
echo. %P1%
@echo off && setlocal EnableDelayedExpansion
title <nul && Title ...\%~nx0
%__APPDIR__%mode.com con: cols=99 lines=3
for %%i in (%*)do set "_arg=!_arg! "%%~i" "
set "cmd_arg= /v /c "%~fnx0" !_arg!" && %__APPDIR__%Net.exe file 2>nul >nul && (
goto :RunAsAdmin
) || (
color 9f & echo/ Running your PowerShel cmdlets...
set "_ps1=%__APPDIR__%\WindowsPowerShell\v1.0\powershell.exe"
!_ps1! -ex unrestricted -Command Start-Process $env:windir\system32\cmd.exe -Verb RunAs -Argument $env:cmd_arg
echo/ Press any key to exit... && %__APPDIR__%timeout.exe -1 >nul & endlocal && goto :EOF
)
echo/ If you see this, sorry it doesn't work... && goto :EOF
:RunAsAdmin
%__APPDIR__%mode.com 99,25 && color 0A
echo/If you see this one, it works sr. Admin^!!...
title <nul && Title ...\%~nx0
rem :: do your admin tasks here....
echo/ Press any key to exit... && %__APPDIR__%timeout.exe -1 >nul
endlocal && goto :EOF