Dlaczego dostaję komunikat „opam nie jest rozpoznawany…” za każdym razem, gdy uruchamiam dowolny plik wsadowy w programie PowerShell?

0

Wczoraj eksperymentowałem z OCaml i opam w systemie Windows bez użycia instalatora - właśnie umieściłem pliki binarne w folderze. Niedługo potem usunąłem pliki binarne. Teraz za każdym razem, gdy uruchamiam dowolny plik wsadowy tylko w programie PowerShell , otrzymuję to:

C:\> .\test.bat
'opam' is not recognized as an internal or external command,
operable program or batch file.
"Hi!!"

Oto zawartość pliku test.bat, ale dzieje się tak z każdym plikiem wsadowym, który wykonuję:

@echo off

echo "Hi!!"

Jak widać z danych wyjściowych w programie PowerShell, wydaje się, że podjęto próbę wykonania opamu, czego oczywiście nie można znaleźć, ponieważ pliki binarne zostały usunięte. Następnie plik wsadowy działa normalnie. Zauważ, że tak się nie dzieje podczas uruchamiania pliku wsadowego za pomocą cmd.exe.

Co tu się dzieje i jak mogę to naprawić?

Jeff P.
źródło
Nie mogę odtworzyć Twojego problemu, ale najprawdopodobniej problem występuje w teście. Nietoperz. Możesz spróbować wykonać to ponownie w test.cmd (tak, to naprawdę robi różnicę) i sprawdzić, czy to działa. Ponadto na jakim systemie operacyjnym jesteś? Czy używasz systemu Windows 10 lub starszej wersji? Jest to ważne, ponieważ możesz mieć starszą wersję programu PowerShell.
LPChip
Co się stanie, jeśli dodasz REM. jako pierwsza linia do skryptu? Czasami widzę dziwny błąd, w którym losowe znaki są dodawane na samym początku pliku .cmd. Zwykle dzieje się tak, gdy ktoś tworzy plik .bat w systemie Mac lub Linux. Możesz to sprawdzić, uruchamiając plik wsadowy z wiersza polecenia. Zobaczysz też dziwne postacie.
LPChip
Wszelkie różnice jeśli otworzysz PowerShell poprzez Win+rtak: Powershell -NoProfile?
root
@root Brak efektu.
Jeff P.

Odpowiedzi:

3

OK, znalazłem odpowiedź:

Istnieje kilka mało znanych kluczy rejestru, których cmd.exe szuka do automatycznego uruchamiania skryptów lub poleceń podczas uruchamiania. Kluczowym pytaniem było HKEY_CURRENT_USER\SOFTWARE\Microsoft\Command Processor\AutoRun. Najwyraźniej, kiedy uruchomiłem opam, umieściłem go opam configure --autorunw tym kluczu rejestru. Dlatego za każdym razem, gdy uruchamiałem cmd.exe lub uruchamiałem plik wsadowy w programie PowerShell (który wywołał cmd.exe, aby go uruchomić), próbował uruchomić polecenie w tym kluczu. Odkąd opam został usunięty (i usunięty z systemu PATH), otrzymywałem

'opam' is not recognized as an internal or external command,
operable program or batch file.

O istnieniu tego klucza rejestru dowiedziałem się na blogu Caelum .

Jeśli wpiszesz cmd /?, tekst pomocy wyświetli listę kluczy rejestru, których szuka. Tekst pomocy (w systemie Windows 10) mówi:

If /D was NOT specified on the command line, then when CMD.EXE starts, it
looks for the following REG_SZ/REG_EXPAND_SZ registry variables, and if
either or both are present, they are executed first.

    HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\AutoRun

        and/or

    HKEY_CURRENT_USER\Software\Microsoft\Command Processor\AutoRun

Aby rozwiązać ten problem, szukałem klucza rejestru i go usunąłem. Problem już nie występuje.

Jeff P.
źródło