Įvadas: paslėptų komandų kelių atskleidimas sistemoje Windows
Kelio konfliktai gali būti dažna problema kūrėjams, dirbantiems su scenarijais ir komandomis Windows komandų eilutėje. Kai vieną iš jūsų scenarijų užgožia kita programa, nes ji yra kelyje, labai svarbu nustatyti visą nurodytos komandos kelią. Šis scenarijus dažnai verčia vartotojus ieškoti UNIX komandos „which“ atitikmens, o tai supaprastina tikslaus komandos kelio vietą.
UNIX sistemose komanda „which“ naudojama norint parodyti visą nurodytos komandos kelią, padedantį išspręsti tokias šešėlio problemas. Tačiau „Windows“ naudotojams gali kilti klausimas, ar jų platformoje yra panašių paslaugų. Tolesnėje diskusijoje išnagrinėsime „Windows“ galimas parinktis, kad pasiektumėte tas pačias funkcijas ir padėtų efektyviai valdyti su keliu susijusias problemas.
komandą | apibūdinimas |
---|---|
setlocal | Pradedamas aplinkos kintamųjų lokalizavimas paketiniame faile, užtikrindamas, kad pakeitimai nepaveiks pasaulinės aplinkos. |
for %%i in ("%command%") do | Kartojama per nurodytą elementų rinkinį, leidžiantį atlikti operacijas su kiekvienu elementu. |
if exist "%%j\%%~i.exe" | Patikrina, ar nurodytame kelyje yra konkretus failas. |
param | Apibrėžia ir nuskaito parametrus, perduotus PowerShell scenarijui. |
Join-Path | Sujungia dvi ar daugiau eilučių į kelią, tinkamai tvarkydamas skiriamuosius simbolius „PowerShell“. |
Test-Path | Patikrina, ar PowerShell yra nurodytas kelias arba failas. |
os.pathsep | Nuskaito operacinės sistemos naudojamą kelio skyriklį, paprastai kabliataškį (;) sistemoje Windows. |
os.access(exe, os.X_OK) | Patikrina, ar failas yra vykdomas Python. |
„Windows“ komandų eilutės scenarijų supratimas
Pateiktuose scenarijuose kiekvienas jų sukurtas taip, kad imituotų UNIX funkcionalumą which komanda, kuri naudojama norint rasti visą komandos kelią. Pirmasis scenarijus naudoja paketinį failą „Windows“ komandų eilutei. Jis prasideda nuo setlocal lokalizuoti aplinkos kintamųjų pokyčius. Tada scenarijus nustato komandos pavadinimą į kintamąjį %command% ir patikrina, ar jis tuščias. The for %%i in ("%command%") do ciklas kartojasi per katalogus, išvardytus PATH aplinkos kintamasis. Šioje kilpoje if exist "%%j\%%~i.exe" patikrina, ar vykdomasis failas egzistuoja esamame ciklo kataloge. Jei randama, jis išveda kelią ir išeina.
Antrasis scenarijus, parašytas PowerShell, prasideda parametrų apibrėžimu param. Scenarijus nuskaito komandos pavadinimą ir padalija PATH aplinkos kintamąjį į atskirus katalogus naudojant $env:PATH -split ';'. The Join-Path komanda sujungia kiekvieną katalogą su komandos pavadinimu, kad sudarytų galimus vykdomuosius kelius. Tada naudoja Test-Path patikrinti, ar yra šių kelių. Jei vykdomasis failas randamas, jis išveda kelią ir išeina. Trečiasis scenarijus, parašytas Python, apibrėžia funkciją which norėdami ieškoti komandos kataloguose, išvardytuose PATH aplinkos kintamasis. Tai naudoja os.pathsep gauti sistemos kelio skyriklį ir os.access kad patikrintų vykdomumą. Šis scenarijus vykdomas naudojant komandinės eilutės argumentą, nurodantį komandos pavadinimą, ir išspausdinamas visas kelias, jei komanda randama.
Viso komandos kelio nustatymas sistemoje „Windows“.
Naudojant „Windows“ komandų eilutę
@echo off
setlocal
set "command=%1"
if "%command%"=="" (
echo Usage: %~n0 command_name
exit /b 1
)
for %%i in ("%command%") do (
for %%j in (".;%PATH:;=;.;%;") do (
if exist "%%j\%%~i.exe" (
echo %%j\%%~i.exe
exit /b 0
)
)
)
echo %command% not found
endlocal
„PowerShell“ komandų kelių nustatymas
„PowerShell“ scenarijaus naudojimas
param (
[string]$command
)
if (-not $command) {
Write-Output "Usage: .\script.ps1 command_name"
exit 1
}
$path = $env:PATH -split ';'
foreach ($dir in $path) {
$exe = Join-Path $dir $command.exe
if (Test-Path $exe) {
Write-Output $exe
exit 0
}
}
Write-Output "$command not found"
Komandų vietų radimas naudojant Python
Python scenarijaus naudojimas
import os
import sys
def which(command):
path = os.getenv('PATH')
for dir in path.split(os.pathsep):
exe = os.path.join(dir, command)
if os.path.isfile(exe) and os.access(exe, os.X_OK):
return exe
return None
if __name__ == "__main__":
if len(sys.argv) != 2:
print("Usage: python script.py command_name")
sys.exit(1)
command = sys.argv[1]
path = which(command)
if path:
print(path)
else:
print(f"{command} not found")
Išplėstiniai kelių valdymo būdai sistemoje „Windows“.
Ne tik surasti visą komandos kelią, bet ir valdyti PATH aplinkos kintamasis yra labai svarbus siekiant išvengti konfliktų ir užtikrinti sklandų scenarijų vykdymą. Sistemoje „Windows“ galima redaguoti sistemos ypatybių sąsają PATH kintama, tačiau tai gali būti sudėtinga dažnai keičiant. Vietoj to, naudojant setx komanda komandų eilutėje arba „PowerShell“ gali būti efektyvesnis būdas valdyti šiuos kintamuosius. The setx komanda leidžia vartotojams nuolat nustatyti aplinkos kintamuosius, o tai naudinga scenarijuose, kuriems reikalingi konkretūs įrankiai ar programos. PATH.
Kitas naudingas įrankis yra where komandą, kuri yra integruota „Windows“ programa, kuri veikia panašiai kaip UNIX which komandą. The where komanda gali rasti ir parodyti vykdomųjų failų, atitinkančių paieškos kriterijus, kelius. Pavyzdžiui, bėgimas where python Komandinėje eilutėje bus išvardytos visos Python vykdomojo failo vietos, rastos PATH. Tai gali būti ypač naudinga nustatant ir sprendžiant konfliktus, kai įdiegtos kelios įrankio versijos. Derinant naudojimą setx ir where, vartotojai gali geriau valdyti savo aplinką ir užtikrinti, kad būtų vykdomos teisingos komandų versijos.
Dažnai užduodami klausimai apie komandų kelio problemas
- Kas yra where komanda Windows?
- The where komanda sistemoje Windows suranda ir parodo vykdomųjų failų, atitinkančių paieškos kriterijus, kelius.
- Kaip redaguoti PATH aplinkos kintamasis?
- Galite redaguoti PATH kintamasis per sistemos ypatybių sąsają arba naudojant setx komandą Command Prompt arba PowerShell.
- Ar galiu naudoti „PowerShell“ komandos keliui rasti?
- Taip, „PowerShell“ galima naudoti norint rasti komandos kelią naudojant scenarijų, kuris kartojasi per katalogus, išvardytus PATH aplinkos kintamasis.
- Koks skirtumas tarp setx ir set komandinėje eilutėje?
- The set komanda nustato aplinkos kintamuosius tik dabartinei sesijai, while setx nustato juos nuolat per seansus.
- Kaip patikrinti, ar failas yra vykdomas Python?
- Galite patikrinti, ar failas yra vykdomas Python, naudodami os.access(file, os.X_OK).
- Ką daro os.pathsep daryti Python?
- The os.pathsep atributas pateikia operacinės sistemos naudojamą kelio skyriklį, kuris yra kabliataškis (;) sistemoje Windows.
Paskutinės mintys:
Norint išvengti konfliktų ir užtikrinti teisingą scenarijaus vykdymą, labai svarbu efektyviai valdyti ir rasti komandų kelius Windows komandų eilutėje. Naudodami paketinius failus, PowerShell scenarijus ir Python, vartotojai gali pakartoti UNIX komandos „which“ funkcijas. Be to, naudojant tokius įrankius kaip komanda where ir PATH kintamojo valdymas gali dar labiau supaprastinti šį procesą. Šie metodai suteikia tvirtus sprendimus, padedančius palaikyti švarią ir efektyvią kūrimo aplinką, padeda vartotojams greitai nustatyti ir išspręsti su keliu susijusias problemas.