Finne den fullstendige banen til en kommando på Windows-kommandolinjen

Batch

Introduksjon: Avdekke skjulte kommandobaner på Windows

Banekonflikter kan være et hyppig problem for utviklere som arbeider med skript og kommandoer på Windows-kommandolinjen. Når et av skriptene dine blir overskygget av et annet program på grunn av dets plassering i banen, blir det avgjørende å identifisere hele banen til en gitt kommando. Dette scenariet fører ofte til at brukere søker etter en ekvivalent av UNIX 'which'-kommandoen, som forenkler å finne den nøyaktige banen til en kommando.

På UNIX-systemer brukes 'which'-kommandoen til å vise hele banen til en spesifisert kommando, og hjelper til med å løse slike skyggeproblemer. Imidlertid kan Windows-brukere lure på om det er et lignende verktøy tilgjengelig på plattformen deres. I den følgende diskusjonen vil vi utforske alternativene som er tilgjengelige på Windows for å oppnå samme funksjonalitet og hjelpe deg med å håndtere sti-relaterte problemer effektivt.

Kommando Beskrivelse
setlocal Begynner lokalisering av miljøvariabler i en batch-fil, og sikrer at endringer ikke påvirker det globale miljøet.
for %%i in ("%command%") do Itererer gjennom det angitte settet med elementer, slik at operasjoner kan utføres på hvert element.
if exist "%%j\%%~i.exe" Sjekker om det finnes en spesifikk fil på den angitte banen.
param Definerer og henter parametrene som sendes til et PowerShell-skript.
Join-Path Kombinerer to eller flere strenger til en bane, og håndterer skilletegn på riktig måte i PowerShell.
Test-Path Verifiserer eksistensen av en spesifisert bane eller fil i PowerShell.
os.pathsep Henter baneseparatoren som brukes av operativsystemet, vanligvis et semikolon (;) på Windows.
os.access(exe, os.X_OK) Sjekker om en fil er kjørbar i Python.

Forstå Windows kommandolinjeskript

I skriptene som følger med, er hvert utformet for å etterligne funksjonaliteten til UNIX kommando, som brukes til å finne hele banen til en kommando. Det første skriptet bruker en batchfil for Windows-ledeteksten. Det begynner med for å lokalisere endringer i miljøvariabler. Skriptet setter deretter kommandonavnet til variabelen og sjekker om den er tom. De for %%i in ("%command%") do loop itererer gjennom katalogene som er oppført i miljøvariabel. Innenfor denne sløyfen er sjekker om den kjørbare filen finnes i gjeldende katalog i løkken. Hvis den blir funnet, sender den ut banen og avslutter.

Det andre skriptet, skrevet i PowerShell, begynner med å definere parametere med . Skriptet henter kommandonavnet og deler opp miljøvariabel inn i individuelle kataloger ved hjelp av . De Join-Path kommando kombinerer hver katalog med kommandonavnet for å danne potensielle kjørbare stier. Den bruker da for å sjekke om disse banene finnes. Hvis den kjørbare filen blir funnet, sender den ut banen og avsluttes. Det tredje skriptet, skrevet i Python, definerer en funksjon for å søke etter kommandoen i kataloger oppført i miljøvariabel. Det bruker 1. 3 for å få systemets baneskiller og for å sjekke for kjørbarhet. Dette skriptet kjøres med et kommandolinjeargument som spesifiserer kommandonavnet, og det skriver ut hele banen hvis kommandoen blir funnet.

Bestemme den fullstendige banen til en kommando i Windows

Bruke Windows Ledetekst

@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

Finne kommandobaner i PowerShell

Bruker PowerShell-skript

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"

Finne kommandoplasseringer med Python

Bruker Python Script

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")

Avanserte banebehandlingsteknikker i Windows

Utover å bare finne hele banen til en kommando, administrere miljøvariabelen er avgjørende for å unngå konflikter og sikre jevn utførelse av skript. I Windows kan man bruke System Properties-grensesnittet til å redigere variabel, men dette kan være tungvint for hyppige endringer. I stedet bruker du kommandoen i ledeteksten eller PowerShell kan gi en mer effektiv måte å administrere disse variablene på. De setx kommandoen lar brukere angi miljøvariabler vedvarende, noe som er nyttig for skript som krever at spesifikke verktøy eller applikasjoner prioriteres i .

Et annet nyttig verktøy er kommando, som er et innebygd Windows-verktøy som oppfører seg på samme måte som UNIX kommando. De kommandoen kan finne og vise banene til kjørbare filer som samsvarer med søkekriteriene. For eksempel løping where python i ledeteksten vil liste alle plasseringer av Python kjørbare som finnes i . Dette kan være spesielt nyttig for å identifisere og løse konflikter når flere versjoner av et verktøy er installert. Ved å kombinere bruken av og , kan brukere bedre administrere miljøet sitt og sikre at de riktige versjonene av kommandoer blir utført.

Ofte stilte spørsmål om kommandobaneproblemer

  1. Hva er kommando i Windows?
  2. De kommandoen i Windows finner og viser banene til kjørbare filer som samsvarer med søkekriteriene.
  3. Hvordan redigerer jeg miljøvariabel?
  4. Du kan redigere variabel gjennom systemegenskaper-grensesnittet eller ved å bruke kommando i ledetekst eller PowerShell.
  5. Kan jeg bruke PowerShell til å finne banen til en kommando?
  6. Ja, PowerShell kan brukes til å finne banen til en kommando ved å bruke et skript som itererer gjennom katalogene som er oppført i miljøvariabel.
  7. Hva er forskjellen mellom og i ledeteksten?
  8. De kommandoen setter miljøvariabler kun for gjeldende økt, while setter dem vedvarende på tvers av økter.
  9. Hvordan kan jeg sjekke om en fil er kjørbar i Python?
  10. Du kan sjekke om en fil er kjørbar i Python ved å bruke .
  11. Hva gjør gjøre i Python?
  12. De attributt gir baneseparatoren som brukes av operativsystemet, som er et semikolon (;) på Windows.

Effektiv administrasjon og lokalisering av kommandostier på Windows-kommandolinjen er avgjørende for å unngå konflikter og sikre korrekt skriptutførelse. Ved å bruke batchfiler, PowerShell-skript og Python, kan brukere replikere funksjonaliteten til UNIX-kommandoen 'hvilken'. I tillegg kan utnyttelse av verktøy som where-kommandoen og administrasjon av PATH-variabelen strømlinjeforme denne prosessen ytterligere. Disse teknikkene gir robuste løsninger for å opprettholde et rent og effektivt utviklingsmiljø, og hjelper brukere raskt å identifisere og løse sti-relaterte problemer.