खोज पथ में Ä, Ö या is होने पर कंसोल विंडो से पावरशेल स्क्रिप्ट कैसे चलाएं?


3

जब मैं सही पर क्लिक करें script.ps1 फ़ाइल और "PowerShell के साथ चलाएँ" का चयन करें, एक PS कंसोल विंडो आती है, और मेरी स्क्रिप्ट किसी कारण से नहीं चल सकती। इसलिए मुझे एक त्रुटि मिलती है, लेकिन मैं वास्तव में नहीं कर सकता पढ़ना संदेश क्योंकि त्रुटि आने के ठीक बाद विंडो बंद हो जाती है।

इसलिए मैं एक नया PowerShell कंसोल विंडो खोलना चाहूंगा, स्क्रिप्ट फ़ाइल पर नेविगेट कर सकता हूं, इसे चला सकता हूं, और उम्मीद है कि इस बार बेवकूफ त्रुटि संदेश पढ़ने की लक्जरी मिल जाएगी। तो मैं कंसोल विंडो से स्क्रिप्ट कैसे चलाऊं?

  • ओएस संस्करण: विंडोज 8.0
  • पुनश्च संस्करण: 3.0

बस टाइपिंग में script.ps1 या सुझाव दिया ".\script.ps1" बस कुछ नहीं करता है।

a

तो मैं अनुमान लगा रहा हूँ कि इसे किसी प्रकार की आज्ञा प्राप्त करने की आवश्यकता है? स्क्रिप्ट वास्तव में सरल है, इसे नए फ़ोल्डर बनाने और उन्हें पढ़ने के द्वारा नाम देना चाहिए Export.txt फ़ाइल।

$folder="C:\test";
$txtFile="C:\test\Export.txt";

get-content $txtFile | %{

    if($_ -match "^(\d+) (\w+)$")
    {
        mkdir "$folder\$_";
    }
}

ध्यान दें! कृपया ध्यान दें कि उपरोक्त त्रुटि संदेश (स्क्रीनशॉट) वास्तविक स्क्रिप्ट को चलाने से संबंधित नहीं है। जिस तरह से मैं स्क्रिप्ट चला सकता हूं, वह एक्सप्लोरर के अंदर स्क्रिप्ट फ़ाइल पर राइट क्लिक करके और "रन विद पॉवरशेल" का चयन करके और मुझे इसे चलाने से प्राप्त होने वाली त्रुटि एक अलग है, न कि आप जो यहां ऊपर देखते हैं।

अद्यतन करें! मेरी दूसरी टिप्पणी नीचे देखें। जैसे रास्तों के लिए C:\test\script.ps1 यह कर देता है के साथ काम .\script.ps1। मुझे अभी भी PS स्क्रिप्ट फ़ाइल को चलाने के लिए मदद चाहिए जब स्क्रिप्ट फ़ाइल के लिए पथ में like, Ä और Å जैसे कायरता पत्र शामिल हैं।

अद्यतन -।, Ä और Å PS को तोड़ता है

जैसा कि मैंने कहा कि मुझे लगता है कि इन पात्रों के साथ PS में मुद्दे हैं। इसलिए मैंने शुरू में सोचा कि मैं इसे सही नहीं कर रहा हूं। तो यहाँ मैं आपको इसे प्रदर्शित करने के लिए दो उदाहरण दूंगा।

Ö, Å और Å के बिना एक PS स्क्रिप्ट चलाना

यह मेरी पटकथा है।

$folder="C:\test";
$txtFile="C:\test\Export.txt";

get-content $txtFile | %{

    if($_ -match "^(\d+) (\w+)$")
    {
        mkdir "$folder\$_";
    }
}

ये उस स्थान की सामग्री हैं जहाँ मैं अभी इसका परीक्षण कर रहा हूँ।

PS C:\test> dir


    Directory: C:\test


Mode                LastWriteTime     Length Name
----                -------------     ------ ----
-a---        2014-02-28     09:12       3648 Export.txt
-a---        2014-02-28     10:49        162 script.ps1


PS C:\test>

यह मैं PS कंसोल विंडो से स्क्रिप्ट चला रहा हूं।

PS C:\test> .\script


    Directory: C:\test


Mode                LastWriteTime     Length Name
----                -------------     ------ ----
d----        2014-02-28     10:55            001 Harberget
d----        2014-02-28     10:55            004 Badstuknappen
d----        2014-02-28     10:55            005 Aspberget
d----        2014-02-28     10:55            006 Knipen
d----        2014-02-28     10:55            011 Juberget
d----        2014-02-28     10:55            012 Rangen
d----        2014-02-28     10:55            014 Grasbricka
d----        2014-02-28     10:55            018 Letafors
d----        2014-02-28     10:55            020 Rya
d----        2014-02-28     10:55            022 Bograngen
d----        2014-02-28     10:55            023 Dalby
d----        2014-02-28     10:55            029 Transtrand
d----        2014-02-28     10:55            032 Viggen
d----        2014-02-28     10:55            033 Nyskoga
d----        2014-02-28     10:55            044 Vitsand
d----        2014-02-28     10:55            059 Lekvattnet
d----        2014-02-28     10:55            064 Gustavsfors
d----        2014-02-28     10:55            066 Tyfors
d----        2014-02-28     10:55            067 Mitandersfors
d----        2014-02-28     10:55            070 Bada
d----        2014-02-28     10:55            073 Geijersholm
d----        2014-02-28     10:55            074 Liljendal
d----        2014-02-28     10:55            077 Bogen
d----        2014-02-28     10:55            079 Grinnemo
d----        2014-02-28     10:55            080 Lysvik
d----        2014-02-28     10:55            082 Uddeholm
d----        2014-02-28     10:55            085 Vitklinten
d----        2014-02-28     10:55            086 Gravendal
d----        2014-02-28     10:55            087 Magnor
d----        2014-02-28     10:55            089 Bortan
d----        2014-02-28     10:55            090 Fredros
d----        2014-02-28     10:55            095 Busken
d----        2014-02-28     10:55            101 Charlottenberg
d----        2014-02-28     10:55            102 Allstakan
d----        2014-02-28     10:55            104 Rotten
d----        2014-02-28     10:55            105 Sunne
d----        2014-02-28     10:55            106 Annefors
d----        2014-02-28     10:55            107 Munkfors
d----        2014-02-28     10:55            108 Sunnemo
d----        2014-02-28     10:55            109 Nordmarker
d----        2014-02-28     10:55            111 Silvergruva
d----        2014-02-28     10:55            113 Skillingemark
d----        2014-02-28     10:55            115 Gunnarsskog
d----        2014-02-28     10:55            116 Mangskog
d----        2014-02-28     10:55            118 Rottneros
d----        2014-02-28     10:55            123 Persberget
d----        2014-02-28     10:55            124 Hellefors
d----        2014-02-28     10:55            125 Bottnar
d----        2014-02-28     10:55            128 Ottebol
d----        2014-02-28     10:55            129 Rackstad
d----        2014-02-28     10:55            130 Gullesbyn
d----        2014-02-28     10:55            131 Emtervik
d----        2014-02-28     10:55            135 Brattfors
d----        2014-02-28     10:55            136 Filipstad
d----        2014-02-28     10:55            137 Saxhyttan
d----        2014-02-28     10:55            138 Orrkullen
d----        2014-02-28     10:55            142 Arvika
d----        2014-02-28     10:55            143 Edane
d----        2014-02-28     10:55            144 Brunsberg
d----        2014-02-28     10:55            148 Nyed
d----        2014-02-28     10:55            149 Hedenskog
d----        2014-02-28     10:55            150 Kroppa
d----        2014-02-28     10:55            151 Loka
d----        2014-02-28     10:55            152 Dalen
d----        2014-02-28     10:55            154 Karlanda
d----        2014-02-28     10:55            156 Glava
d----        2014-02-28     10:55            158 Boda
d----        2014-02-28     10:55            159 Frykerud
d----        2014-02-28     10:55            160 Frykestad
d----        2014-02-28     10:55            161 Forshaga
d----        2014-02-28     10:55            164 Storfors
d----        2014-02-28     10:55            167 Holmedal
d----        2014-02-28     10:55            169 Lenungen
d----        2014-02-28     10:55            172 Vermskog
d----        2014-02-28     10:55            173 Edsvalla
d----        2014-02-28     10:55            174 Grava
d----        2014-02-28     10:55            175 Alster
d----        2014-02-28     10:55            176 Glumserud
d----        2014-02-28     10:55            177 Kungskog
d----        2014-02-28     10:55            178 Lundsberg
d----        2014-02-28     10:55            180 Mona
d----        2014-02-28     10:55            181 Foxen
d----        2014-02-28     10:55            182 Silbodal
d----        2014-02-28     10:55            183 Sannaneknatten
d----        2014-02-28     10:55            186 Borgvik
d----        2014-02-28     10:55            187 Grums
d----        2014-02-28     10:55            188 Eriksberg
d----        2014-02-28     10:55            189 Karlstad
d----        2014-02-28     10:55            193 Alkvettern
d----        2014-02-28     10:55            194 Trankil
d----        2014-02-28     10:55            195 Blomskog
d----        2014-02-28     10:55            196 Sillerud
d----        2014-02-28     10:55            198 Gillberga
d----        2014-02-28     10:55            199 Segmon
d----        2014-02-28     10:55            200 Ed
d----        2014-02-28     10:55            204 Presterud
d----        2014-02-28     10:55            205 Kristinehamn
d----        2014-02-28     10:55            207 Salholmen
d----        2014-02-28     10:55            208 Gustavsfors
d----        2014-02-28     10:55            211 Kila
d----        2014-02-28     10:55            212 Hammar
d----        2014-02-28     10:55            215 Skallholmen
d----        2014-02-28     10:55            217 Posseberg
d----        2014-02-28     10:55            219 Degerfors
d----        2014-02-28     10:55            220 Torrskog
d----        2014-02-28     10:55            221 Suled
d----        2014-02-28     10:55            222 Svanskog
d----        2014-02-28     10:55            223 Tveta
d----        2014-02-28     10:55            224 Seffle
d----        2014-02-28     10:55            226 Kilsbyn
d----        2014-02-28     10:55            227 Visnum
d----        2014-02-28     10:55            228 Nysund
d----        2014-02-28     10:55            233 Rudskoga
d----        2014-02-28     10:55            234 Grytfors
d----        2014-02-28     10:55            237 Millesvik
d----        2014-02-28     10:55            240 Rosenborg

जाहिर है कि स्क्रिप्ट चल रही है। हालाँकि, यह केवल बनाने के लिए कुल 245 फ़ोल्डर में से 116 फ़ोल्डर बनाता है। जो स्क्रिप्ट के साथ ही करना पड़ सकता है। यह लंघन लाइनों जैसे है 002 Långflon तथा 003 Källegrafsrös क्योंकि उनमें they, Ä और / या Å अक्षर होते हैं। कोई विचार? लेकिन मुद्दा यह है कि स्क्रिप्ट उम्मीद के मुताबिक PS कंसोल विंडो में चल रही है।

उसी PS स्क्रिप्ट को with, with और with के साथ चलाना

मैंने जानबूझकर फ़ोल्डर नाम में एक n में फेंक दिया है। इसलिए test का नाम बदल दिया गया है täst। मैंने इन परिवर्तनों के साथ स्क्रिप्ट फ़ाइल को अपडेट किया है, और यह अब मेरी स्क्रिप्ट है।

$folder="C:\täst";
$txtFile="C:\täst\Export.txt";

get-content $txtFile | %{

    if($_ -match "^(\d+) (\w+)$")
    {
        mkdir "$folder\$_";
    }
}

अभी परीक्षण फ़ोल्डर में कोई फ़ोल्डर नहीं हैं। मैंने परीक्षण को फिर से चलाने के लिए उन्हें हटा दिया है।

PS C:\täst> dir


    Directory: C:\täst


Mode                LastWriteTime     Length Name
----                -------------     ------ ----
-a---        2014-02-28     09:12       3648 Export.txt
-a---        2014-02-28     11:04        164 script.ps1


PS C:\täst>

और फिर, यह मैं अद्यतन स्क्रिप्ट फ़ाइल चला रहा हूं।

PS C:\täst> .\script.ps1
get-content : Cannot find path 'C:\täst\Export.txt' because it does not exist.
At C:\täst\script.ps1:4 char:1
+ get-content $txtFile | %{
+ ~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ObjectNotFound: (C:\täst\Export.txt:String) [Get-Content], ItemNotFoun
    + FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.GetContentCommand

PS C:\täst>

पथ 'C: \ täst \ Export.txt' नहीं मिल सकता क्योंकि यह मौजूद नहीं है।

जैसा कि आप देख सकते हैं, यह एक रास्ता खोजने की कोशिश कर रहा है जो वहां नहीं है। बिंदु साबित हुआ। वर्ण!, Ä और PS PS को तोड़ें! पर क्यों? मैं क्या कर रहा हूँ जो इतना गलत है? ...


टाइप करते समय उद्धरणों का उपयोग न करें .\script.ps1। यह सिर्फ आपके आदेश को प्रतिध्वनित करेगा।
Ashtray

इसलिए .\script.ps1 इसे चलाएंगे? लेकिन कहता है type ".\script.ps1" और इसका मतलब है कि उद्धरण चिह्नों को शामिल करना, नहीं?
Samir

1
ओह! इसलिए यह कर देता है तब काम करें। धन्यवाद! यह सिर्फ इतना ही है नहीं करता मेरे अपने खोज पथ के साथ काम करें। मेरे पास एक \\FILESERVER\path\path\path के रूप में घुड़सवार Z: चलाना। इसमें पत्र शामिल है और यह PS के काम न करने के लिए पर्याप्त कारण है? यह इन पत्रों को पसंद नहीं करता है। यदि नाम Å, doesn't और letters को शामिल करने के लिए सेट किया गया है तो उपरोक्त स्क्रिप्ट नए फ़ोल्डर बनाना भी नहीं चाहती है।
Samir

तो मुझे यकीन नहीं है कि यह मेरे सवाल का जवाब देता है, यह इस तरह का है ... तरह ... के साथ काम करता है .\filename.ps1 जब तक पथ में फंकी कैरेक्टर शामिल नहीं होते हैं
Samir

आपको यह तकनीकी लेख उपयोगी लग सकता है: technet.microsoft.com/en-us/library/ee176949.aspx
wmz

जवाबों:


3

यहाँ आप UTF-8 (वर्ण सेट) का उपयोग करके निर्देशिका नाम दर्ज करने में कामयाब रहे हैं:

$folder="C:\täst";

Umlaut को स्क्रिप्ट में दो वर्णों के रूप में संग्रहीत किया जा रहा है। यही कारण है कि आप इसे त्रुटि संदेश में दो वर्णों के रूप में देखते हैं:

get-content : Cannot find path 'C:\täst\Export.txt' because it does not exist.

वास्तव में आपने "फ़ोल्डर नाम में जानबूझकर in कैसे फेंका"? आपको एएससीआईआई के रूप में करने की आवश्यकता है, यूटीएफ -8 के रूप में नहीं।

"टाइप" कमांड का उपयोग करके अपनी स्क्रिप्ट प्रदर्शित करें; मुझे यकीन है कि आप तब त्रुटि संदेश की तरह UTF प्रतिनिधित्व देखेंगे। आपका संपादक आपकी अपेक्षा के अनुसार आपके लिए umlaut प्रदर्शित कर रहा है। टाइप कमांड, [सबसे अधिक संभावना है] त्रुटि संदेश में जैसे umlaut को दो अक्षरों के रूप में दिखाएगा।

सुनिश्चित करें कि आपका संपादक शुद्ध ASCII या ANSI को बचा रहा है।


मेरा "संपादक" विंडोज़ एक्सप्लोरर था। अगर वह मदद करता है? मैंने बस एक्सप्लोरर में "टेस्ट" से फ़ोल्डर का नाम बदलकर एक्सप्लोरर में "टैस्ट" कर दिया। स्क्रिप्ट के लिए इसे नोटोम ++ के साथ बिना बीओएम के यूटीएफ के साथ सहेजा गया था।
Samir

@ सैमी यूएनएसएफ का प्रयोग करें, यूटीएफ का नहीं। बहुत ज्यादा कभी नहीँ UTF में स्क्रिप्ट को सेव करें। आपके डेटा के लिए UTF, आपकी स्क्रिप्टिंग के लिए ANSI।
UnlimitedInfinity

आप यह सुनिश्चित करते हैं कि "शुद्ध ASCII" का उपयोग नोटपैड ++ में कैसे किया जा रहा है? मैं केवल एएनएसआई प्राप्त कर सकता हूं, और जैसा कि मैं समझता हूं कि यह वास्तव में एएससीआईआई का माइक्रोसॉफ्ट संस्करण है। लेकिन मुझसे गलती हो सकती है।
Samir

@ सैमी एएनएसआई और एएससीआईआई काफी समान हैं कि मैंने हमेशा उन्हें समान माना है। मैंने अभी-अभी google से पूछा और कुछ अंतर हैं: differencebetween.net/technology/web-applications/... जवाब अब दोनों के पास है।
UnlimitedInfinity

1
@ सैमी नोटपैड ++ में एएनएसआई के रूप में सहेजने के लिए, मेनू पर क्लिक करें Encoding - & gt; Encode in ANSI
Martin

1

पॉवरशेल स्क्रिप्ट चला रहा है

मान लीजिए कि आपके पास एक PowerShell स्क्रिप्ट है, जिसे कहा जाता है my script.ps1 संग्रहित किया है C:\Some folder। इसे चलाने के लिए आप या तो:

  • वास्तविक पथ पर नेविगेट करें, और फिर उसे निष्पादित करें:

    cd "C:\Some folder"
    & ".\my script.ps1"
    
  • सीधे पूर्ण पथ निर्दिष्ट करके इसे निष्पादित करें:

    & "C:\Some folder\my script.ps1"
    

& है कॉल ऑपरेटर । एक विकल्प के रूप में आप इसे एक नियमित कमांड प्रॉम्प्ट से शुरू कर सकते हैं:

powershell -ExecutionPolicy Bypass -NoLogo -NoProfile -File "C:\Some folder\my script.ps1"

स्क्रिप्ट को ठीक करना

मैंने स्क्रिप्ट फिर से लिखी है ताकि वह दो तर्क स्वीकार करे: इनपुट फ़ाइल (जिसे यूटीएफ -8 के रूप में सहेजा गया पाठ माना जाता है), और गंतव्य फ़ोल्डर। जब कोई एन्कोडिंग निर्दिष्ट नहीं किया जाता है तो यह ASCII के लिए डिफॉल्ट हो जाएगा।

if ($args.Count -gt 1)
{
    $file=$args[0];
    $dest=$args[1];
    Get-Content $file -Encoding UTF8 | %{ md "$dest\$_" >$null; }
}

संदर्भ


अरे, यह वास्तव में आसान है। इस सिंटेक्स का पता नहीं था। धन्यवाद!
Ashtray

हां, मैंने अभी परीक्षण किया है, ".script.ps1 अकेले काम नहीं करता। परंतु & ".\script.ps1" करता है, और ऐसा करता है .\script.ps1। लेकिन यह, मुझे issues, not और, वर्णों के साथ होने वाले मुद्दों में मदद नहीं करता है। PS इन पात्रों को क्यों नहीं समझ पाएगा? मैं उदाहरण के साथ शीघ्र ही अपने प्रश्न का अपडेट पोस्ट करूंगा।
Samir

मैंने अपने प्रश्न को उदाहरणों से अद्यतन किया है। यदि आप अपने उत्तर का विस्तार कर सकते हैं और यह बता सकते हैं कि जब खोज मार्ग में गैर- ASCII वर्ण होते हैं, तो PS में स्क्रिप्ट कैसे चलाएं, मैं इसे एक समाधान के रूप में स्वीकार कर सकता हूं। या यह वास्तव में स्क्रिप्ट से ही संबंधित है ( get-content $txtFile )?
Samir

आपका मतलब है जैसे get-content $txtFile | %{{mkdir "$folder\$_";}}? वह केवल आउटपुट करता है mkdir "$folder\$_"; पीएस विंडो में बार-बार 245 बार, यह कोई फ़ोल्डर नहीं बनाता है।
Samir

मैंने देखा कि मूल स्क्रिप्ट 021 Södra Finnskoga जैसी चीजों के साथ ठीक से काम नहीं करेगी क्योंकि नाम में एक जगह है। किसी भी तरह, स्क्रिप्ट की तरह $folder="C:\täst"; $txtFile="C:\täst\Export.txt"; get-content $txtFile | %{mkdir "$folder\$_";} मेरे लिये कार्य करता है। स्क्रिप्ट और सूची को सहेजने / संपादित करने के लिए आप क्या उपयोग कर रहे हैं? यह एन्कोडिंग समस्या की तरह दिखता है।
and31415

-1

आपको फ़ाइल को UTF-8 के रूप में BOM के साथ सहेजना होगा - आप नोटपैड ++ का उपयोग कर सकते हैं। पॉवरशेल टूटी हुई है और बिना बीओएम - फिगर के यूटीएफ -8 वाली फ़ाइलों को मज़बूती से नहीं पढ़ सकती।

समान समस्या + समाधान जैसा कि ऊपर वर्णित है: https://stackoverflow.com/a/14482588/1819480

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.