batch-file
バッチファイルとPowershellハイブリッド
サーチ…
一時ファイルを含むPowershellを実行する
これは他のハイブリッド トピックで何度も何度も言及されています 。 Powershellを実行する古い学校だが簡単な方法は次のとおりです。
- Powershellスクリプトを一時的なスクリプトに
echo
する - 一時的なスクリプトを実行する
- 必要に応じて一時スクリプトを削除する
これはサンプルスクリプトです。
@echo off
echo powershell-command>Temp.ps1
echo another line>>Temp.ps1
rem echo the script into a temporary file
powershell -File Temp.ps1
rem execute the temporary script
del Temp.ps1
rem Optionally remove the temporary script
長いスクリプトが必要な場合は上記の方法ではecho
文が必要ですが、@Aaciniの方が良い方法です
@echo off
setlocal
rem Get the number of the "<resource>" line
for /F "delims=:" %%a in ('findstr /N "<resource>" "%~F0"') do set "start=%%a"
rem Skip such number of lines and show the rest of this file
(for /F "usebackq skip=%start% delims=" %%a in ("%~F0") do echo %%a) > Temp.ps1
powershell -File Temp.ps1
del /f /s /q Temp.ps1
goto :EOF
<resource>
PS
Powershell script
POWERSHELLコマンドを使用して1行のPowershellコマンドを実行する
POWERSHELL
コマンドを使用すると、一時ファイルなしで、バッチスクリプトから直接1行のコマンドを実行できます。
ここに構文があります。
powershell.exe -Command <yourPowershellCommandHere>
また、実際の結果を改善するために、 -Nologo
ような他のフラグを組み込むこともできます。
一時ファイルのないPowershell /バッチハイブリッド
これは stackoverflowのユーザrojoによって提案されたアプローチであり、これもコマンドライン引数を扱うことができます:
<# : batch portion
@echo off & setlocal
(for %%I in ("%~f0";%*) do @echo(%%~I) | ^
powershell -noprofile "$argv = $input | ?{$_}; iex (${%~f0} | out-string)"
goto :EOF
: end batch / begin powershell #>
"Result:"
$argv | %{ "`$argv[{0}]: $_" -f $i++ }
このように呼ばれる:
psbatch.bat arg1 "これはarg2です" arg3
生産する:
Result:
$argv[0]: C:\Users\rojo\Desktop\test.bat
$argv[1]: arg1
$argv[2]: This is arg2
$argv[3]: arg3
Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow