আমি কী পাওয়ার পাওয়ার এ কাজ করতে পারি?


186

&&গুগলে সন্ধান করা কুখ্যাতভাবে কঠিন, তবে আমি সবচেয়ে ভাল খুঁজে পেয়েছি এই নিবন্ধটি যা ব্যবহার করতে বলেছে -and

দুর্ভাগ্যক্রমে এটি আর কোনও তথ্য দেয় না, এবং আমি কী করব তার সন্ধান করতে পারছি না -and(আবার, অনুসন্ধান করার জন্য একটি কুখ্যাতভাবে কঠিন জিনিস)

আমি যে প্রসঙ্গে এটি ব্যবহার করার চেষ্টা করছি সেটি হ'ল "এক্সিকিউট সিএমডি 1, এবং যদি সফল হয় তবে সিএমডি 2 কার্যকর করুন", মূলত:

csc /t:exe /out:a.exe SomeFile.cs && a.exe

এটি এমন একজনের পক্ষে সহজ কয়েকটি প্রতিনিধি পয়েন্ট হওয়া উচিত যা জানে, ধন্যবাদ!


সম্পাদনা করুন: আপনি যদি কেবল একটি লাইনে একাধিক কমান্ড চালাতে চান এবং যদি প্রথমটি ব্যর্থ হয় বা না হয় তবে আপনার কোনও যত্ন নেই, আপনি ;আমার বেশিরভাগ উদ্দেশ্যে এটি ব্যবহার করতে পারেন

উদাহরণস্বরূপ: kill -n myapp; ./myapp.exe


পাওয়ারশেলের রয়েছে এবং এবং লজিকাল অপারেটর রয়েছে। অপারেটররা আপনি যেভাবে প্রত্যাশা করেন সেভাবে কাজ করছে না? যদি তা হয় তবে আপনি এখানে প্রকাশটি পোস্ট করতে পারেন।
মোহিত চক্রবর্তী

: এই প্রশ্ন দেখতে পাবেন, এটা কি আপনি চান না stackoverflow.com/questions/1917271/...
joshperry

2
যে কেউ ব্যাশ-শৈলী আগ্রহী &&এবং ||PowerShell একটি অংশ হয়ে উঠছে: বৈশিষ্ট্যের জন্য দয়া করে ভোট এখানে
mklement0

1
আক্ষরিক (এবং তাৎপর্যপূর্ণ) চিহ্ন সহ প্রশ্নের অনুসন্ধানের জন্য ওয়েব অনুসন্ধান সম্পাদনের প্রয়োজনীয়তার বিষয়ে: সিম্বলহাউন্ড এটির জন্য দরকারী। প্রশ্নের সাথে সম্পর্কিত কিছু উদাহরণ এখানে দেওয়া হয়েছে: পাওয়ারশেল && ; পাওয়ারশেল - এবং । আপনি ব্যবহার করেন তাহলে DuckDuckGo , আপনি SymbolHound মাধ্যমে অনুসন্ধান করতে পারেন !sym
নিসবিদ

3
জুন 2019 আপডেট : পাওয়ারশেল টিম বাস্তবায়ন করছে &&এবং ||! গিটহাব PR
pilau

উত্তর:


193

সিএমডি-তে 'এবং&' এর অর্থ "কমান্ড 1 চালাও, এবং যদি এটি সফল হয়, কমান্ড 2 চালান"। আমি এটি এই জাতীয় জিনিসের জন্য ব্যবহার করেছি:

build && run_tests

পাওয়ারশেলের মধ্যে, আপনি সবচেয়ে কাছের জিনিসটি করতে পারেন:

(build) -and (run_tests)

এটিতে একই যুক্তি রয়েছে তবে কমান্ডগুলির আউটপুট পাঠ্য নষ্ট হয়ে গেছে। যদিও এটি আপনার পক্ষে যথেষ্ট ভাল।

আপনি যদি কোনও স্ক্রিপ্টে এটি করছেন, আপনি সম্ভবত বিবৃতিগুলি পৃথক করে ভাল হতে পারবেন:

build
if ($?) {
    run_tests
}

2019/11/27 : &&অপারেটরটি এখন পাওয়ারশেল 7 পূর্বরূপ 5+ এর জন্য উপলব্ধ :

PS > echo "Hello!" && echo "World!"
Hello!
World!

2
আর: "হাস্যকর যে তারা মুছে ফেলবে" - আমি পাওয়ারশেলকে "বোকা অংশগুলি মুছে ফেলা সিএমডি" হিসাবে ভাবতে পছন্দ করি না। is.gd/k92B
জে বাজুজি

90
আমি পাওয়ারশেলকে "বোকা অংশগুলি মুছে ফেলা সিএমডি" হিসাবে ভাবতে পছন্দ করি না। আমি এটিকে "কোনও দরকারী বিট ছাড়াই বাশ" হিসাবে ভাবতে পছন্দ করি।
পোড

15
আপনি build ; if ($?) { run_tests }কমান্ড লাইনেও করতে পারেন।
ডক্যাচট

19
পাওয়ারশেল শেখার সময় সত্যিকারের হতাশার দ্রুততম উপায় হ'ল এটি কেবল একটি প্রসারিত সিএমডি বা বাশ বলে ভেবে শুরু করা। এটির একটি মৌলিকভাবে পৃথক মডেল রয়েছে, বিশেষত যখন এটি ইনপুট, আউটপুট, পাইপিং এবং ফলাফলের ক্ষেত্রে আসে। একটি ভাল টিউটোরিয়াল বা ওভারভিউ দিয়ে শুরু করুন এবং অন্যান্য শেল থেকে কাজ করে সিনট্যাক্স তৈরি করার জন্য খুব বেশি চেষ্টা করবেন না। আপনাকে এটি নিজের শর্তে নিতে হবে।
মার্ক মিউয়ার

3
পাওয়ার শেলকে তার নিজের শর্তে নেওয়া, আমি কীভাবে একটি কমান্ড চালাব এবং তারপরে, কেবল যদি সেই আদেশটি সফল হয়, অন্য কমান্ডটি চালান? আমি মনে করি না যে bashএটি পাওয়ারশেলের উপর ধারণা চাপিয়ে দিচ্ছে। এটি বেসিক শেল কার্যকারিতা। এখনও অবধি আমি সর্বাধিক দেখাচ্ছি build ; if ($?) { run_tests }যা আমি এখন থেকে ব্যবহার করব। আমি আশা করি পাওয়ারশেল দল &&সমর্থন যোগ করবে !
নাট

28

&& এবং || প্রয়োগ করার জন্য (এখনও রয়েছে) তালিকায় ছিল তবে যুক্ত করার জন্য পরবর্তী সবচেয়ে দরকারী জিনিস হিসাবে পপ আপ হয়নি। কারণটি হ'ল আমাদের -অ্যান্ড এবং -অর রয়েছে। যদি আপনি এটি গুরুত্বপূর্ণ মনে করেন, দয়া করে সংযোগে একটি পরামর্শ দায়ের করুন এবং আমরা এটি V3 এর জন্য বিবেচনা করব।


11
আমি কানেক্টে সাইন আপ করেছি এবং পাওয়ারশেলের জন্য নিজেকে মনোনীত করেছি, তবে কীভাবে কোনও পরামর্শ দেওয়া যায় তা আমি বুঝতে পারি না। কানেক্ট ওয়েবসাইটটি সত্যই জটিল এবং বিভ্রান্তিকর :-(
অরিওন এডওয়ার্ডস

6
আমি পূর্ব-বিদ্যমান অনুরোধটি খুঁজে পাইনি তাই আমি একটি করেছিলাম: কানেক্ট.মাইক্রোসফট
অ্যান্ডি আরিসেম্দি

22
আপনি জানেন, সমান লেখার জন্য প্রশ্নটি এখনও রয়েছে এবং আপনি যদি উত্তরটি ব্যবহারের উদাহরণ যুক্ত করেন তবে আপনার উত্তর অনেক বেশি কার্যকর হবে-AND
কায়োটিক

5
এটি গুরুত্বপূর্ণ কারণ এটি প্রায় এক অনন্তকালীন উইন্ডোর চেয়ে পুরানো সিস্টেমে ব্যবহৃত একটি প্রাথমিক ফ্লো নিয়ন্ত্রণ সরঞ্জাম। এইভাবে লিনাক্স এবং উইন্ডোগুলির মধ্যে অন্য একটি বিরতি পার্থক্য উপস্থাপন করা হয়।
এয়ারটোনিক্স

6
আমি আশা করি জেফরি স্নোভার শুনছেন, এই এতক্ষণে এটি বাস্তবায়নের যথেষ্ট কারণ হওয়া উচিত। এটি অনেক দীর্ঘ হয়েছে, এবং এখন পাওয়ারশেল জায়গাগুলিতে পপআপ শুরু করে, যেমন ভিএসকোড এটি উইন্ডোজে একটি ডিফল্ট টার্মিনাল হিসাবে ব্যবহার করে। এটি && ছাড়া মোট ব্যথা, -andআউটপুট খায় , একেবারে সমতুল্য নয়।
সিয়েন্টিক

13

এটা চেষ্টা কর:

$errorActionPreference='Stop'; csc /t:exe /out:a.exe SomeFile.cs; a.exe

9
দ্রষ্টব্য: প্রথম কমান্ডটি ব্যর্থ হলে দ্বিতীয়টি এখনও চলতে চলেছে।
ব্রুনোএলএম

4
পছন্দ পরিবর্তনশীল $ErrorActionPreferenceকেবল সেমিডলেট দ্বারা প্রতিবেদন করা অ-সমাপ্ত ত্রুটিগুলি কীভাবে আচরণ করা হয় তা পরিচালনা করে; যেমন বাহ্যিক ইউটিলিটি cscএবং a.exeকখনো এই ধরনের ত্রুটি প্রতিবেদন (তারা শুধুমাত্র তাদের প্রস্থান অবস্থা প্রতিফলিত $?(বিজয় পতাকা) এবং $LASTEXITCODE, তাই আপনার কমান্ড লাইন পরিমাণে (নির্দিষ্ট প্রস্থান কোড রিপোর্ট)) নিঃশর্ত সঞ্চালনের উভয় কমান্ড (সমতুল্য cmd'র csc /t:exe /out:a.exe SomeFile.cs & a.exe)
mklement0

5

যদি আপনার কমান্ডটি সেমিডি.এক্সে উপলভ্য থাকে ( python ./script.pyপাওয়ারশেল কমান্ডের মতো কিছু নয় ii .(এটি এক্সপ্লোরার দ্বারা বর্তমান ডিরেক্টরিটি খোলার অর্থ)), আপনি পাওয়ারশেলের মধ্যেই cmd.exe চালাতে পারেন। বাক্য গঠনটি এরকম:

cmd /c "command1 && command2"

এখানে, এই প্রশ্নের&& বর্ণিত সেন্টিমিডিয়া সিনট্যাক্স দ্বারা সরবরাহ করা হয়েছে ।


4
ভাল, এটি অতিরিক্ত কার্যকারিতা অ্যাক্সেস করতে সেন্টিমিটে আপগ্রেড করুন।
বিল কে

4

আমি পাওয়ারশেলের কমান্ডগুলির এই ক্রমটি চেষ্টা করেছি:

Fisrt পরীক্ষা

PS C:\> $MyVar = "C:\MyTxt.txt"
PS C:\> ($MyVar -ne $null) -and (Get-Content $MyVar)
True

($MyVar -ne $null)ফিরে সত্য এবং (Get-Content $MyVar)এছাড়াও ফিরে সত্য

দ্বিতীয় পরীক্ষা

PS C:\> $MyVar = $null
PS C:\> ($MyVar -ne $null) -and (Get-Content $MyVar)
False

($MyVar -ne $null)ফিরে মিথ্যা এবং এ পর্যন্ত আমি অনুমান আবশ্যক (Get-Content $MyVar)এছাড়াও ফিরে মিথ্যা

তৃতীয় পরীক্ষা প্রমাণ করে দ্বিতীয় শর্তটিও বিশ্লেষণ করা হয়নি।

PS C:\> ($MyVar -ne $null) -and (Get-Content "C:\MyTxt.txt")
False

($MyVar -ne $null)ফিরে মিথ্যা এবং প্রমাণিত দ্বিতীয় শর্ত (Get-Content "C:\MyTxt.txt")দৌড়ে না, ফিরে মিথ্যা পুরো কমান্ড করেন।


আপনার ঠিক আছে! এটি && অপারেটর হিসাবে আচরণ করে। এমনকি ডানদিকের একটি $ () এটি মূল্যায়ন করতে দেয় না!
ফালকো আলেকজান্ডার

2

খুব পুরানো প্রশ্ন, তবে নতুনদের জন্য: সম্ভবত পাওয়ারশেল সংস্করণ (অনুরূপ তবে সমতুল্য নয় ) যা প্রশ্নটি সন্ধান করছে, তা নীচে ব্যবহার -andকরা:

(build_command) -and (run_tests_command)


1
এটি আপনার ব্যবহারের ক্ষেত্রে ঠিক হতে পারে তবে এটি &&এর প্রস্থান কোডটিকে উপেক্ষা করে এমন আচরণ করছে না build_command
সাইমন বুচান

এটি অবশ্যই সঠিক জিনিস করছে না। এটি প্রথম কমান্ডটি ব্যর্থ হলেও দ্বিতীয় কমান্ডটি চালাবে।
নেট

এটি সম্পূর্ণ ভুল। সিএমডি এবং ব্যাশের ;সমতুল্য । এটা স্পষ্টভাবে হিসাবে একই নয় cmd কমান্ড মধ্যে&;&&
phuclv

এটি উভয় প্রক্রিয়ার জন্য STDOUT এবং STDERR নিঃশব্দ করে।
ড্রাগাস

0

এটি প্রসঙ্গে নির্ভর করে তবে কার্যত "-এবং" এর উদাহরণ এখানে রয়েছে:

get-childitem | where-object { $_.Name.StartsWith("f") -and $_.Length -gt 10kb }

সুতরাং এটি এমন একটি ডিরেক্টরিতে 10 কেবি এর চেয়ে বড় সমস্ত ফাইল পাচ্ছে যার ফাইল নাম "চ" দিয়ে শুরু হয়।


1
এটি মূল প্রশ্নের উত্তর নয়, যা একাধিক কমান্ড কার্যকর করার বিষয়ে।
বিডুকস

0
if (start-process filename1.exe) {} else {start-process filename2.exe}

এটি "&& "এর চেয়ে কিছুটা দীর্ঘ তবে এটি কোনও জিনিস স্ক্রিপ্ট না করেই সম্পাদন করে এবং এটি মনে রাখা খুব কঠিন নয়। কখনও না থেকে ভাল। :)


2
Start-Processসাধারণভাবে কমান্ড-লাইন ইউটিলিটিগুলির জন্য অনুরোধ করার জন্য ব্যবহার করা ভুল সরঞ্জাম। বিশেষত, এখানে ব্যবহৃত হিসাবে, নতুন কনসোল উইন্ডোতে অবিচ্ছিন্নভাবে Start-Processচালিত হয় filename1.exeএবং কোনও কিছুই দেয় না , যা বুলিয়ান প্রেক্ষাপটে মূল্যায়ন করে $false। এমনকি যদি আপনি বাদ দেন Start-Process(যা আপনাকে কীভাবে কমান্ড-লাইন ইউটিলিটিগুলি - সরাসরি সরাসরি উপস্থাপন করতে হবে) এ পদ্ধতিটি সংক্ষিপ্ত হবে, কারণ শর্তসাপেক্ষের ফলাফলটি নির্ভর করে যে ইউটিলিটি কোনও স্টাডআউট আউটপুট উত্পাদন করেছে কিনা, যার সাথে কোনও গ্যারান্টিযুক্ত সম্পর্ক নেই কিনা তার উপর নির্ভর করে depends সফল বা না।
mklement0

0

আমি মনে করি একটি সহজ যদি বিবৃতি এটি অর্জন করতে পারে। একবার আমি উপরে মেকিলেমেটসের প্রতিক্রিয়া দেখেছি last

# Set 1st command to variable
$a=somecommand

# Temp var to store exit status of last command (since we can't write to $?)
$test=$?

# Run Test
if ($test=$true) { 2nd-command }

অপের উদাহরণের জন্য, এটি হবে:

a=(csc /t:exe /out:a.exe SomeFile.cs); $test = $?; if ($test=$true) { a.exe }

0

একটি ভার্বোজের সমতুল্য একত্রিত করা $LASTEXITCODEএবং -eq 0:

msbuild.exe args; if ($LASTEXITCODE -eq 0) { echo 'it built'; } else { echo 'it failed'; }

আমি নিশ্চিত না কেন if ($?)আমার পক্ষে কাজ করল না, তবে এইটি করেছে।


-1

আমরা && পদ্ধতি ব্যবহার না করে এই আদেশটি চেষ্টা করতে পারি

চেষ্টা করুন {হোস্টনাম; if ($ lastexitcode -eq 0) {ipconfig / all | সন্ধানকারী / আমি বায়োস}} ক্যাচ {প্রতিধ্বনি} অবশেষে {


try/ এর কোনও প্রয়োজন নেই catch, কারণ এটি কেবল ত্রুটিগুলি বন্ধ করার জন্য প্রয়োজন , যা বাহ্যিক ইউটিলিটি যেমন hostname, ipconfigএবং findstrট্রিগার করতে পারে না। পরীক্ষা করা হচ্ছে $LASTEXITCODEশুধুমাত্র প্রয়োজন হয় যদি আপনি একটি বহিস্থিত উপযোগ করে নির্দিষ্ট প্রস্থান কোড সেট করুন জানতে চাই - বিমূর্ত সফলতা বা ব্যর্থতা প্রতিফলিত হয় $?, শুধু দেশীয় cmdlets মত।
mklement0

আমি মনে করি @ সাইবারিওন সঠিক পথে আছে। আমি &&ইউনিক্সে অনেক চেষ্টা / ধরার মতো বলে মনে করি যে আপনি }যখন শর্ট-সার্কিটের পরবর্তী কমান্ডগুলি (সেগুলি এড়িয়ে যান) তখন একটি নতুন ব্লকে (যেমন ) আপনার পরবর্তী কমান্ডগুলি মোড়ানো প্রয়োজন হয় না । আমি মনে করি যে কোনও AmpAmpফাংশন / ফিল্টার যখন if (!?) { throw "last command failed" }ছুটে &&যায় তখন পাওয়ারশেলের পোর্টিংয়ের জন্য খুব কার্যকর প্রতিস্থাপন হবে । ব্যবহার :csc /t:exe /out:a.exe SomeFile.cs; AmpAmp; a.exe
yzorg
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.