CommandLine'dan USB Aygıtını Çıkar


1

Bir toplu iş dosyasının sonuna koyabileceğim ve toplu iş dosyasının güvenli bir şekilde depolandığı usb aygıtını çıkarmama izin verebileceği bir komut istiyorum.

Bunu başarabilecek bir powershell komutu buldum ama cmd'den çalıştırmayı denediğimde çalışmıyor ("% ~ d0" USB yolu değişkenidir):

powershell -command "$driveEject = New-Object -comObject Shell.Application ; $driveEject.Namespace(17).ParseName("%~d0").InvokeVerb("Eject")"

İşte alıyorum hata mesajı:

At line:1 char:93
+ ... ject Shell.Application ; $driveEject.Namespace(17).ParseName(E:).Invo ...
+                                                                  ~
Missing ')' in method call.
At line:1 char:93
+ ... ct Shell.Application ; $driveEject.Namespace(17).ParseName(E:).Invoke ...
+                                                                ~~
Unexpected token 'E:' in expression or statement.
At line:1 char:95
+ ... t Shell.Application ; $driveEject.Namespace(17).ParseName(E:).InvokeV ...
+                                                                 ~
Unexpected token ')' in expression or statement.
    + CategoryInfo          : ParserError: (:) [], ParentContainsErrorRecordException
    + FullyQualifiedErrorId : MissingEndParenthesisInMethodCall

Yanıtlar:


0

Alıntı Yapma Kuralları hakkında makale, PowerShell'de tek ve çift tırnak işareti kullanma kurallarını açıklar. kullanım

…; $driveEject.Namespace(17).ParseName('%~d0').InvokeVerb('Eject')"

veya ( içsel çift tırnak içincmd de kaçmanız gerekir )

…; $driveEject.Namespace(17).ParseName("""%~d0""").InvokeVerb("""Eject""")"

Bununla birlikte, bir Powershell Best Practice kaynağı ikincisini kullanımdan kaldırır: Dizelerde değişken veya kaçış dizisi yoksa çift tırnaktan kaçınmanız önerilir, tek tırnak işareti tercih edin .


0

@JoseZ'in size verdiği şeyin yanında, eğer bu bir astarı PoSH ISE veya VSCode'a yerleştirirseniz, renk kodlamasının sözdizimi hatalarını gösterdiğini göreceksiniz. Noktalı özellikler siyah renkte olmalıdır, Bu nedenle, .Namespace, .ParseName ve .InvokeVerb, rengiyle gösterilen ve böylece başarısız olacak şekilde dizeler olarak gösterilir.

Bu şekilde deneyin, sadece değişken olan her şeyi bırakarak, böylece kaçan şeylerden kalan tüm ekstra alıntıları ortadan kaldırın.

powershell -command "(New-Object -comObject Shell.Application).NameSpace(17).ParseName('F:').InvokeVerb('Eject')"

Sistemlerimden birini test edin, böylece bunun yazıldığı gibi çalıştığını biliyorum.

Son olarak, bunun için PoSH'yi kullanabildiğiniz ve kullanabildiğiniz için, neden bir toplu iş dosyası kullanıyorsunuz?

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.