从.bat启动不像直接运行.ps1那样工作

时间:2015-09-08 11:13:37

标签: windows powershell batch-file

我试图创建一个脚本,人们可以双击来运行一组偶尔会发生变化的命令。在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,但是运行批处理文件不会,或者至少不会到两个文件都在的目录中(无法在任何地方找到它,虽然我猜它可能仍然是一个工作目录问题?)。

1 个答案:

答案 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"

话虽如此,为什么你首先运行具有提升权限的下载脚本?别这么做。