我试图创建一个脚本,人们可以双击来运行一组偶尔会发生变化的命令。在Linux中,我运行一个.sh,它会另外一个sh(我可以在需要时更改)并运行它。我正在为Windows寻找类似的解决方案。
我查看了PowerShell,但发现它需要从.bat运行以允许双击,所以现在我有以下内容:
foo.bat
档案:
@ECHO OFF
SET ThisScriptsDirectory=%~dp0
SET PowerShellScriptPath=%ThisScriptsDirectory%bar.ps1
PowerShell -NoProfile -ExecutionPolicy Bypass -Command "& {Start-Process PowerShell -ArgumentList '-NoProfile -ExecutionPolicy Bypass -File ""%PowerShellScriptPath%""' -Verb RunAs}";
调用bar.ps1
:
Invoke-WebRequest https://dl.dropboxusercontent.com/u/xxx/bar2.ps1 -OutFile bar2.ps1
从PowerShell运行bar.ps1
可以正常工作并下载bar2.ps1
,但是运行批处理文件不会,或者至少不会到两个文件都在的目录中(无法在任何地方找到它,虽然我猜它可能仍然是一个工作目录问题?)。
答案 0 :(得分:0)
您的批处理文件正在运行具有提升权限的PowerShell脚本。这样做会将工作目录更改为C:\Windows\system32
(出于安全原因),因此您很可能会在那里找到下载的文件。要将ouptut文件放在与脚本相同的目录中,您可以更改PowerShell脚本,如下所示:
$dir = Split-Path $MyInvocation.MyCommand.Path -Parent
$filename = 'bar2.ps1'
$url = "https://dl.dropboxusercontent.com/u/xxx/$filename"
Invoke-WebRequest $url -OutFile "$dir/$filename"
话虽如此,为什么你首先运行具有提升权限的下载脚本?别这么做。