Tôi đã sử dụng bản Beta 2 trong một thời gian và nó đã khiến tôi phải lo lắng khi tôi chạy lệnh cmd.exe khi chạy Dấu nhắc lệnh VS2010. Tôi sử dụng để có một kịch bản vsvars2008.ps1 tốt đẹp cho Visual Studio 2008. Bất cứ ai có một vsvars2010.ps1 hoặc một cái gì đó tương tự?Làm cách nào để sử dụng PowerShell với Dấu nhắc lệnh Visual Studio?
Trả lời
Ăn cắp tự do tại đây: http://allen-mack.blogspot.com/2008/03/replace-visual-studio-command-prompt.html, tôi có thể làm việc này. Tôi đã thêm thông tin sau vào tiểu sử của mình.ps1 và tất cả đều tốt đẹp với thế giới.
pushd 'c:\Program Files (x86)\Microsoft Visual Studio 10.0\VC'
cmd /c "vcvarsall.bat&set" |
foreach {
if ($_ -match "=") {
$v = $_.split("="); set-item -force -path "ENV:\$($v[0])" -value "$($v[1])"
}
}
popd
write-host "`nVisual Studio 2010 Command Prompt variables set." -ForegroundColor Yellow
Điều này đã hoạt động tốt trong nhiều năm - cho đến Visual Studio 2015. vcvarsall.bat không còn tồn tại nữa. Thay vào đó, bạn có thể sử dụng tệp vsvars32.bat, nằm trong thư mục Common7 \ Tools.
pushd 'C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\Tools'
cmd /c "vsvars32.bat&set" |
foreach {
if ($_ -match "=") {
$v = $_.split("="); set-item -force -path "ENV:\$($v[0])" -value "$($v[1])"
}
}
popd
write-host "`nVisual Studio 2015 Command Prompt variables set." -ForegroundColor Yellow
Mọi thứ đã thay đổi một lần nữa cho Visual Studio 2017. vsvars32.bat
dường như đã bị bỏ ủng hộ VsDevCmd.bat
. Đường dẫn chính xác có thể khác nhau tùy thuộc vào phiên bản Visual Studio 2017 bạn đang sử dụng.
pushd "C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\Tools"
cmd /c "VsDevCmd.bat&set" |
foreach {
if ($_ -match "=") {
$v = $_.split("="); set-item -force -path "ENV:\$($v[0])" -value "$($v[1])"
}
}
popd
Write-Host "`nVisual Studio 2017 Command Prompt variables set." -ForegroundColor Yellow
Tùy chọn đơn giản nhất là chạy lời nhắc lệnh VS 2010 và sau đó khởi động PowerShell.exe. Nếu bạn thực sự muốn thực hiện điều này từ lời nhắc PowerShell "home" của mình, cách tiếp cận bạn hiển thị là cách để thực hiện. Tôi sử dụng một kịch bản mà Lee Holmes đã viết một khi trở lại:
<#
.SYNOPSIS
Invokes the specified batch file and retains any environment variable changes
it makes.
.DESCRIPTION
Invoke the specified batch file (and parameters), but also propagate any
environment variable changes back to the PowerShell environment that
called it.
.PARAMETER Path
Path to a .bat or .cmd file.
.PARAMETER Parameters
Parameters to pass to the batch file.
.EXAMPLE
C:\PS> Invoke-BatchFile "$env:VS90COMNTOOLS\..\..\vc\vcvarsall.bat"
Invokes the vcvarsall.bat file to set up a 32-bit dev environment. All
environment variable changes it makes will be propagated to the current
PowerShell session.
.EXAMPLE
C:\PS> Invoke-BatchFile "$env:VS90COMNTOOLS\..\..\vc\vcvarsall.bat" amd64
Invokes the vcvarsall.bat file to set up a 64-bit dev environment. All
environment variable changes it makes will be propagated to the current
PowerShell session.
.NOTES
Author: Lee Holmes
#>
function Invoke-BatchFile
{
param([string]$Path, [string]$Parameters)
$tempFile = [IO.Path]::GetTempFileName()
## Store the output of cmd.exe. We also ask cmd.exe to output
## the environment table after the batch file completes
cmd.exe /c " `"$Path`" $Parameters && set > `"$tempFile`" "
## Go through the environment variables in the temp file.
## For each of them, set the variable in our local environment.
Get-Content $tempFile | Foreach-Object {
if ($_ -match "^(.*?)=(.*)$")
{
Set-Content "env:\$($matches[1])" $matches[2]
}
}
Remove-Item $tempFile
}
Lưu ý: chức năng này sẽ có sẵn trong các PowerShell Community Extensions 2.0 phát hành mô-đun dựa trên sẽ sớm ra mắt.
Kudos gửi Andy S cho câu trả lời của anh ấy. Tôi đã sử dụng giải pháp của anh ấy một thời gian, nhưng đã gặp phải vấn đề ngày hôm nay. Bất kỳ giá trị nào có dấu bằng trong nó được cắt ngắn tại dấu bằng. Ví dụ, tôi đã có:
JAVA_TOOL_OPTIONS=-Duser.home=C:\Users\Me
Nhưng phiên PS của tôi báo cáo:
PS C:\> $env:JAVA_TOOL_OPTIONS
-Duser.home
tôi cố định này bằng cách sửa đổi kịch bản hồ sơ của tôi như sau:
pushd 'c:\Program Files (x86)\Microsoft Visual Studio 11.0\VC'
cmd /c "vcvarsall.bat&set" |
foreach {
if ($_ -match "=") {
$i = $_.indexof("=")
$k = $_.substring(0, $i)
$v = $_.substring($i + 1)
set-item -force -path "ENV:\$k" -value "$v"
}
}
popd
Một câu hỏi cũ nhưng giá trị một câu trả lời khác cho (a) cung cấp cho VS2013 suppport; (b) kết hợp tốt nhất hai câu trả lời trước đó; và (c) cung cấp một hàm bao hàm.
Điều này xây dựng trên kỹ thuật của Andy Andy (được xây dựng dựa trên kỹ thuật của Allen Mack như Andy đã chỉ ra (theo đó nó được xây dựng dựa trên kỹ thuật của Robert Anderson như Allen đã chỉ ra). là "tôi--", vì vậy tôi cũng tính đến điều đó))).
Đây là mã cuối cùng của tôi - lưu ý việc sử dụng định lượng không tham lam trong regex để xử lý mọi giá trị nhúng có thể có trong các giá trị. Điều đó cũng xảy ra để đơn giản hóa mã: một kết hợp duy nhất thay vì một kết quả trùng khớp sau đó được chia nhỏ như trong ví dụ của Andy hoặc một đối sánh sau đó chỉ mục và các phần tử như trong ví dụ "của tôi").
function Set-VsCmd
{
param(
[parameter(Mandatory, HelpMessage="Enter VS version as 2010, 2012, or 2013")]
[ValidateSet(2010,2012,2013)]
[int]$version
)
$VS_VERSION = @{ 2010 = "10.0"; 2012 = "11.0"; 2013 = "12.0" }
$targetDir = "c:\Program Files (x86)\Microsoft Visual Studio $($VS_VERSION[$version])\VC"
if (!(Test-Path (Join-Path $targetDir "vcvarsall.bat"))) {
"Error: Visual Studio $version not installed"
return
}
pushd $targetDir
cmd /c "vcvarsall.bat&set" |
foreach {
if ($_ -match "(.*?)=(.*)") {
Set-Item -force -path "ENV:\$($matches[1])" -value "$($matches[2])"
}
}
popd
write-host "`nVisual Studio $version Command Prompt variables set." -ForegroundColor Yellow
}
Tôi đã tìm thấy một phương pháp đơn giản here: sửa đổi phím tắt.
Phím tắt ban đầu là một cái gì đó như thế này:
%comspec% /k ""C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\Tools\VsDevCmd.bat""
Thêm & powershell
trước khi báo cuối cùng, như thế này:
%comspec% /k ""C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\Tools\VsDevCmd.bat" & powershell"
Nếu bạn muốn làm cho nó trông giống như PS, đi đến Màu tab của thuộc tính phím tắt và đặt các giá trị Red, Green và Blue thành 1, 36 và 86 tương ứng.
Đơn giản và hoạt động như một sự quyến rũ. Câu trả lời này xứng đáng có nhiều upvotes. –
Điều duy nhất tôi không thích về điều này, là nó giữ một quá trình cmd.exe thừa nạp. Khác hơn là một giải pháp tốt đẹp – orad
Keith đã đề cập PowerShell Extensions Cộng đồng (PSCX), với Invoke-BatchFile
lệnh của nó:
Invoke-BatchFile "${env:ProgramFiles(x86)}\Microsoft Visual Studio 12.0\VC\vcvarsall.bat"
Tôi cũng nhận thấy rằng PSCX cũng có một Import-VisualStudioVars
chức năng:
Import-VisualStudioVars -VisualStudioVersion 2013
Theo PSCX 3.2.0, VS 2015 không được hỗ trợ trong lệnh này, tôi đã mở [issue] (https://pscx.codeplex.com/workitem/43203) cho nó. – orad
Tôi muốn vượt qua các lệnh vào một vỏ con như vậy:
cmd /c "`"${env:VS140COMNTOOLS}vsvars32.bat`" && <someCommand>"
Hoặc cách khác
cmd /c "`"${env:VS140COMNTOOLS}..\..\VC\vcvarsall.bat`" amd64 && <someCommand> && <someOtherCommand>"
- 1. Sử dụng lệnh NuGet powershell từ bên ngoài Visual Studio
- 2. Visual Studio Command Prompt so với dấu nhắc lệnh thông thường?
- 3. Powershell bên trong Visual Studio
- 4. Sử dụng python để phát lệnh nhắc
- 5. Làm cách nào để nhập lệnh vào dấu nhắc gdb khi gỡ lỗi với CDT Eclipse?
- 6. Làm thế nào để hủy bỏ Visual Studio xây dựng bằng cách sử dụng dòng lệnh?
- 7. Cách sử dụng OpenSSL với Visual Studio
- 8. Làm cách nào để thực hiện các lệnh bên ngoài từ dấu nhắc lệnh gdb?
- 9. Sử dụng ssh từ dấu nhắc lệnh của Windows
- 10. Sendkeys từ dấu nhắc lệnh
- 11. Dấu nhắc lệnh VS2008 + Cygwin
- 12. Sử dụng ILDASM với Visual Studio 2008
- 13. Visual Studio 2012 Dự án PowerShell
- 14. Cài đặt dịch vụ Windows bằng dấu nhắc lệnh Windows?
- 15. Làm thế nào để sử dụng makefiles trong Visual Studio?
- 16. Làm thế nào để bạn chạy một ứng dụng giao diện điều khiển trong cửa sổ đầu ra Visual Studio, thay vì mở một dấu nhắc lệnh mới?
- 17. PowerShell cmdlet như Visual Studio Tool External
- 18. Thực hiện một lệnh trong dấu nhắc lệnh bằng cách sử dụng excel VBA
- 19. Cách chạy tác vụ Windows 7 hiện có bằng cách sử dụng dấu nhắc lệnh
- 20. Windows: Làm thế nào để chỉ định lệnh multiline trên dấu nhắc lệnh?
- 21. Làm cách nào để thêm ghi chú vào dấu trang hoặc dòng của Visual Studio?
- 22. Sử dụng windbg từ Visual Studio
- 23. Làm cách nào để biên dịch với Visual Studio x64?
- 24. Làm cách nào để gỡ lỗi dấu nhắc bash?
- 25. RunCodeAnalysis = true không hoạt động trong dấu nhắc lệnh (MSBuild)
- 26. Tệp hàng loạt để xác định xem có sử dụng Dấu nhắc Lệnh
- 27. Sử dụng dấu nhắc lệnh để gọi một tệp hàng loạt trong một thư mục con
- 28. Cách sử dụng IronPython với Visual Studio 2008
- 29. Đối số dòng lệnh nào Visual Studio sử dụng để chạy MsTest?
- 30. (JAVA) Sử dụng Dấu nhắc Lệnh để tạo tệp .jar từ nhiều tệp .class
tôi đã làm như vậy và điều này chỉ làm việc tốt. –
Tôi đồng ý - điều này cũng làm việc hoàn hảo cho tôi. Tôi cũng đã phải thay đổi đường dẫn đến studio trực quan trong Program Files (không phải x86), vì tôi không sử dụng hệ thống 64 bit. – czuroski
Chỉ cần lưu ý nhanh rằng kỹ thuật tương tự này hoạt động cho Visual Studio 2012. Chỉ cần thay đổi "Microsoft Visual Studio 10.0" thành "Microsoft Visual Studio 11.0" –