আমি ভিজ্যুয়াল স্টুডিও কমান্ড প্রম্পট দিয়ে পাওয়ারশেলটি কীভাবে ব্যবহার করতে পারি?


119

আমি কিছুক্ষণের জন্য বিটা 2 ব্যবহার করছি এবং ভিএস 2010 কমান্ড প্রম্পট চালানোর সময় আমাকে সেগুলি বাদাম চালিয়ে যাচ্ছে যা আমাকে cmd.exe এ চাপতে হবে। আমার কাছে ভিজ্যুয়াল স্টুডিও ২০০ for-এর জন্য একটি সুন্দর vsvars2008.ps1 স্ক্রিপ্ট ছিল Anyone কারও কাছে কোনও ভার্ভার্স 2010.ps1 বা এর মতো কিছু রয়েছে?

উত্তর:


223

এখান থেকে উদার চুরি: http://allen-mack.blogspot.com/2008/03/replace-visual-studio-command-prompt.html , আমি এটি কাজ করতে সক্ষম হয়েছি। আমি আমার প্রোফাইল.ps1 এ নিম্নলিখিতগুলি যুক্ত করেছি এবং বিশ্বের সাথে ভাল।

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

এটি বছরের পর বছর ধরে ভালভাবে কাজ করেছে - ভিজ্যুয়াল স্টুডিও 2015 অবধি v vcvarsall.bat আর বিদ্যমান নেই। পরিবর্তে, আপনি vsvars32.bat ফাইলটি ব্যবহার করতে পারেন, যা কমন 7 \ সরঞ্জাম ফোল্ডারে অবস্থিত।

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

থিংস ভিসুয়াল স্টুডিও 2017. জন্য এখনো আবার পরিবর্তিত হয়েছে vsvars32.batপ্রদর্শিত হয় পক্ষে বাদ করা হয়েছে VsDevCmd.bat। আপনি যে ভিজ্যুয়াল স্টুডিও 2017 ব্যবহার করছেন তার উপর নির্ভর করে সঠিক পাথটি পৃথক হতে পারে।

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

6
শুধু একটি দ্রুত নোট যে এই একই কৌশল ভিসুয়াল স্টুডিও 2012 জন্য কাজ করে শুধু "Microsoft ভিসুয়াল স্টুডিও 10.0" "Microsoft ভিসুয়াল স্টুডিও 11.0" থেকে পরিবর্তন
অ্যান্ডি এস

9
echo $Profileআপনার প্রোফাইল.ps1 এর জন্য অভিযুক্ত পথটি দেখতে, যদি আপনি এটি কখনও তৈরি করেন নি
ম্যাট স্টিফেনসন

5
স্ক্রিপ্ট নিজেই আশ্চর্যজনকভাবে কাজ করে। সতর্কতার একটি নোট, যদিও (সম্ভবত): ভিজ্যুয়াল স্টুডিওতে প্যাকেজ ম্যানেজার কনসোল নিজেই পাওয়ারশেল হোস্ট হিসাবে, এই স্ক্রিপ্টটি সেখানেও চালানো হবে। এটি কোনও সমস্যা হিসাবে দেখা যাচ্ছে না যতক্ষণ না আপনি "ডিবাগিং ছাড়াই চালান" বা অন্য কোনও ফাংশন বা প্লাগইনগুলি চালিত যা স্ট্যান্ডার্ড উইন্ডোজ কনসোল প্রবর্তন করে পিএমসি শুরু হওয়ার পরে কাজ করবে না। আমি এটির আশেপাশে কাজ করেছি, "প্রোফাইল.ps1" - এর উত্তরে স্ক্রিপ্টটি সংরক্ষণ করার পরিবর্তে, আমি এটিকে "মাইক্রোসফট.পাওয়ারশেল_প্রফিল.পিএস 1" তে সংরক্ষণ করেছি যাতে এটি কেবল "সঠিক" পাওয়ারশেল সেশনে চালিত হয়।
ক্রিস সিমন্স 20

3
সঠিকভাবে পরিবেশের ভেরিয়েবলগুলি (ভিএস ২০১৫ এর জন্য VS140COMNTOOLS) ব্যবহার করার সময় পাথগুলিকে হার্ডকোড করা সত্যিই খারাপ অভ্যাস। এটি এমনকি কাস্টম ভিএস ইনস্টলগুলির জন্যও কাজ করবে।
ভু

5
আমি পরিবেশের ভেরিয়েবলগুলি ব্যবহারের আকাঙ্ক্ষার প্রশংসা করি, তবে সেই পরিবর্তনগুলি খুব ব্যাচ ফাইলের মাধ্যমে আমরা ভেরিয়েবলগুলি বের করার চেষ্টা করছি বলে মনে হয়। আমি বিপরীতে প্রমাণ দেখতে খুশি হবে। ক্লিন ভিজ্যুয়াল স্টুডিও 2017 ইনস্টল সহ আমার একটি ক্লিন উইন্ডোজ 10 ইনস্টল আছে এবং আমি ভিএসডিএভিসিএমডি.ব্যাট চালনা না করা পর্যন্ত কোনও ভিএস 150 সিএমএনটিওএলস পরিবেশ পরিবর্তনশীল নয়।
অ্যান্ডি এস

26

সবচেয়ে সহজ বিকল্পটি হ'ল ভিএস ২০১০ কমান্ড প্রম্পট চালানো এবং তারপরে পাওয়ার শেল.এক্সি শুরু করা। আপনি যদি সত্যিই আপনার "হোম" পাওয়ারশেল প্রম্পট থেকে এটি করতে চান তবে আপনি যে পদ্ধতির দেখান তা হ'ল উপায়। আমি লি স্কীম কিছুক্ষণ আগে লিখেছিলাম যে স্ক্রিপ্ট ব্যবহার:

<#
.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
}

দ্রষ্টব্য: এই ফাংশনটি শীঘ্রই পাওয়ারশেল সম্প্রদায় এক্সটেনশনগুলি 2.0 মডিউল-ভিত্তিক রিলিজ পাওয়া যাবে।


22

আমি একটি সহজ পদ্ধতি পাওয়া এখানে : শর্টকাট পরিবর্তন করুন।

মূল শর্টকাটটি এরকম কিছু:

%comspec% /k ""C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\Tools\VsDevCmd.bat""

& powershellসর্বশেষ উদ্ধৃতিটির আগে এটি যুক্ত করুন :

%comspec% /k ""C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\Tools\VsDevCmd.bat" & powershell"

আপনি যদি এটি পিএস-এর মতো দেখতে আরও চান তবে শর্টকাট বৈশিষ্ট্যের রং ট্যাবে যান এবং লাল, সবুজ এবং নীল মানগুলি যথাক্রমে 1, 36 এবং 86 এ সেট করুন।

স্ক্রিনশট


সোজা এবং আকর্ষণীয় কাজ করে। এই উত্তরটি আরও উন্নয়নের দাবিদার।
মিউয়ার

2
আমি কেবল এটির জন্য পছন্দ করি না, এটি হ'ল এটি একটি রিন্ডান্ট সেন্টিমিডি। এক্স প্রসেসটি লোড করে রাখে। এটি বাদে একটি দুর্দান্ত সমাধান।
ওরাড

17

একটি পুরানো প্রশ্ন তবে এর আরও একটি জবাব (ক) ভিএস2013 সরবরাহ সরবরাহ সরবরাহ; (খ) পূর্ববর্তী দুটি উত্তরের মধ্যে সেরাটি একত্রিত করুন; এবং (সি) একটি ফাংশন আবরণ সরবরাহ।

এটি @ অ্যান্ডির কৌশলটি তৈরি করে (যা অ্যান্ডি নির্দেশিত হিসাবে অ্যালেন ম্যাকের কৌশলটির উপর ভিত্তি করে (যা রবার্ট অ্যান্ডারসনের কৌশলকে অ্যালেন নির্দেশিত হিসাবে গড়ে তোলে) যার মধ্যে এই পৃষ্ঠায় কেবলমাত্র "মি- - ", তাই আমি এটিও আমলে নিয়েছি)))।

এখানে আমার চূড়ান্ত কোডটি - মানগুলিতে কোনও সম্ভাব্য এম্বেড থাকা সমানকে পরিচালনা করতে রেজেজে অ-লোভী কোয়ান্টিফায়ার ব্যবহারটি নোট করুন। কোডটি সহজীকরণে এটিও ঘটে: ম্যাচের পরিবর্তে একটি ম্যাচ তারপরে অ্যান্ডির উদাহরণ বা কোনও ম্যাচ এবং তারপরে সূচিপত্র এবং "আমার -" উদাহরণ হিসাবে সাবস্ট্রিংগুলি হিসাবে বিভক্ত হয়।

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
}

পাওয়ারশেল ২.০ সামঞ্জস্যের জন্য [parameter(Mandatory=$true,
প্যারাম

1
দুর্দান্ত, তবে পুশড / পপড ছাড়া ইমো ভাল লাগবে। ঠিক এর মতো কিছু ব্যবহার করুনcmd /c """$targetDir\vcvarsall.bat""&set"
stijn

9

কিথ ইতিমধ্যে এর Invoke-BatchFileকমান্ড সহ পাওয়ারশেল সম্প্রদায় সম্প্রসারণ (পিএসসিএক্স) উল্লেখ করেছে :

Invoke-BatchFile "${env:ProgramFiles(x86)}\Microsoft Visual Studio 12.0\VC\vcvarsall.bat"

আমি আরও লক্ষ্য করেছি যে পিএসসিএক্সের একটি Import-VisualStudioVarsকার্যকারিতা রয়েছে:

Import-VisualStudioVars -VisualStudioVersion 2013

4
পিএসসিএক্স 3.2.0 হিসাবে, ভিএম 2015 এই সেন্টিমলেটটিতে সমর্থিত নয়। আমি এটির জন্য একটি ইস্যু খুলেছি ।
অরেড

3

তার উত্তরের জন্য অ্যান্ডি এস এর কাছে কুডোস। আমি তার সমাধানটি কিছু সময়ের জন্য ব্যবহার করে আসছি, তবে আজ একটি সমস্যায় পড়েছি। এতে সমান চিহ্ন থাকা যে কোনও মান সমান চিহ্নে কাটা হয়। উদাহরণস্বরূপ, আমার ছিল:

JAVA_TOOL_OPTIONS=-Duser.home=C:\Users\Me

তবে আমার পিএস সেশনটি রিপোর্ট করেছে:

PS C:\> $env:JAVA_TOOL_OPTIONS
-Duser.home

নিম্নলিখিতটিতে আমার প্রোফাইল স্ক্রিপ্টটি সংশোধন করে আমি এটি ঠিক করেছি:

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

আরে সুন্দর সংযোজন। এটিও ভিএস ২০১৫ / ১ versions সংস্করণ দিয়ে আপডেট করবেন ? এটি প্রথম গুগলের ফলাফল, আমি মনে করি আপনার সংযোজন লোককে সহায়তা করবে।
স্কুইরেল্কিলার

1

যে কারও জন্য এটি এখনও ২০২০ এবং ভিজ্যুয়াল স্টুডিও কোড 1.41.1 এ লড়াই করে চলেছে, তাই এখানে কিছুটা বিষয় বন্ধ করুন।

উপরে থেকে সমস্ত কোড এবং ইন্টারনেটের বিভিন্ন অংশ ব্যবহার করা যেমন https://help.appveyor.com/discussion/questions/18777-how-to-use-vcvars64bat-from-powershell থেকে এবং ধাপে ধাপে আমি পরিচালনা করতে পেরেছি নীচের স্ক্রিপ্ট কাজ করে।

ভিএসকোড "সেটিংস.জসন" এ সংরক্ষণ করা হয়েছে এবং কোড রানার এক্সটেনশন ইনস্টল করা আছে।

মাইক্রোসফ্ট (আর) সি / সি ++ অপ্টিমাইজ করা সংকলক সংস্করণ ভিজুয়াল স্টুডিও 2015 / 14.0 থেকে "ক্লিএক্সএক্সি":

"code-runner.runInTerminal": true,
"code-runner.executorMap": {
  "cpp": "cd $dir; pushd \"C:\\Program Files (x86)\\Microsoft Visual Studio 14.0\\VC\"; cmd.exe /c \"call vcvarsall.bat x86_amd64 & set > %temp%\\vcvars.txt\"; Get-Content \"$env:temp\\vcvars.txt\" | Foreach-Object { if ($_ -match \"^(.*?)=(.*)$\") {   Set-Content \"env:\\$($matches[1])\" $matches[2]  }}; popd; cls; cl *.cpp; .\\\"$fileNameWithoutExt.exe\"; Write-Host -NoNewLine 'Press any key to continue...';  $null = $Host.UI.RawUI.ReadKey('NoEcho,IncludeKeyDown'); del \"$fileNameWithoutExt.exe\"; del \"$fileNameWithoutExt.obj\""}

মাইক্রোসফ্ট (আর) সি / সি ++ অপ্টিমাইজ করা সংকলক সংস্করণ "ক্লিপ এক্সেক্স" ভিজুয়াল স্টুডিও 2019 / 16.4.3 থেকে:

"code-runner.runInTerminal": true,
"code-runner.executorMap": {
  "cpp": "cd $dir; pushd \"c:\\Program Files (x86)\\Microsoft Visual Studio\\2019\\Community\\VC\\Auxiliary\\Build\"; cmd.exe /c \"call vcvarsall.bat x86_amd64 & set > %temp%\\vcvars.txt\"; Get-Content \"$env:temp\\vcvars.txt\" | Foreach-Object { if ($_ -match \"^(.*?)=(.*)$\") {   Set-Content \"env:\\$($matches[1])\" $matches[2]  }}; popd; cls; cl *.cpp; .\\\"$fileNameWithoutExt.exe\"; Write-Host -NoNewLine 'Press any key to continue...';  $null = $Host.UI.RawUI.ReadKey('NoEcho,IncludeKeyDown'); del \"$fileNameWithoutExt.exe\"; del \"$fileNameWithoutExt.obj\""}

আছে HTH


0

আমি কমান্ডগুলি চাইল্ড শেলের মধ্যে এমনভাবে প্রেরণ করতে চাই:

cmd /c "`"${env:VS140COMNTOOLS}vsvars32.bat`" && <someCommand>"

বা বিকল্পভাবে

cmd /c "`"${env:VS140COMNTOOLS}..\..\VC\vcvarsall.bat`" amd64 && <someCommand> && <someOtherCommand>"  
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.