Find den fulde sti til en kommando på Windows kommandolinje

Batch

Introduktion: Afdækning af skjulte kommandostier på Windows

Stikonflikter kan være et hyppigt problem for udviklere, der arbejder med scripts og kommandoer på Windows-kommandolinjen. Når et af dine scripts bliver overskygget af et andet program på grund af dets placering i stien, bliver det afgørende at identificere den fulde sti for en given kommando. Dette scenarie får ofte brugere til at søge en ækvivalent til UNIX-kommandoen 'hvilken', som forenkler lokaliseringen af ​​den nøjagtige sti til en kommando.

På UNIX-systemer bruges 'which'-kommandoen til at vise den fulde sti til en specificeret kommando, hvilket hjælper med at løse sådanne skyggeproblemer. Men Windows-brugere spekulerer måske på, om der er et lignende værktøj tilgængeligt på deres platform. I den følgende diskussion vil vi udforske de tilgængelige muligheder på Windows for at opnå den samme funktionalitet og hjælpe dig med at håndtere stirelaterede problemer effektivt.

Kommando Beskrivelse
setlocal Begynder lokalisering af miljøvariabler i en batch-fil, og sikrer, at ændringer ikke påvirker det globale miljø.
for %%i in ("%command%") do Gentager det specificerede sæt af elementer, hvilket gør det muligt at udføre handlinger på hvert element.
if exist "%%j\%%~i.exe" Kontrollerer, om der findes en specifik fil på den givne sti.
param Definerer og henter de parametre, der sendes til et PowerShell-script.
Join-Path Kombinerer to eller flere strenge til en sti, og håndterer separatortegn korrekt i PowerShell.
Test-Path Bekræfter eksistensen af ​​en specificeret sti eller fil i PowerShell.
os.pathsep Henter den sti-separator, der bruges af operativsystemet, typisk et semikolon (;) på Windows.
os.access(exe, os.X_OK) Kontrollerer, om en fil er eksekverbar i Python.

Forståelse af Windows Command Line Scripts

I de medfølgende scripts er hver designet til at efterligne funktionaliteten af ​​UNIX kommando, som bruges til at finde den fulde sti til en kommando. Det første script bruger en batch-fil til Windows-kommandoprompten. Det starter med at lokalisere miljøvariable ændringer. Scriptet sætter derefter kommandonavnet til variablen og tjekker om den er tom. Det for %%i in ("%command%") do loop itererer gennem de mapper, der er angivet i miljøvariabel. Inden for denne sløjfe er kontrollerer, om den eksekverbare fil findes i den aktuelle mappe i løkken. Hvis den findes, udsender den stien og afsluttes.

Det andet script, skrevet i PowerShell, begynder med at definere parametre med . Scriptet henter kommandonavnet og opdeler miljøvariabel ind i individuelle mapper ved hjælp af . Det Join-Path kommando kombinerer hver mappe med kommandonavnet for at danne potentielle eksekverbare stier. Den bruger så for at kontrollere eksistensen af ​​disse stier. Hvis den eksekverbare fil findes, udsender den stien og afsluttes. Det tredje script, skrevet i Python, definerer en funktion for at søge efter kommandoen i mapper, der er angivet i miljøvariabel. Det bruger os.pathsep for at få systemets sti-separator og for at tjekke for eksekverbarhed. Dette script køres med et kommandolinjeargument, der angiver kommandonavnet, og det udskriver den fulde sti, hvis kommandoen findes.

Bestemmelse af den fulde sti til en kommando i Windows

Brug af Windows kommandoprompt

@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

Finde kommandostier i PowerShell

Brug af PowerShell Script

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"

Find kommandoplaceringer med Python

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

Avancerede stihåndteringsteknikker i Windows

Udover blot at finde den fulde vej til en kommando, administrere miljøvariablen er afgørende for at undgå konflikter og sikre problemfri udførelse af scripts. I Windows kan man bruge grænsefladen Systemegenskaber til at redigere variabel, men dette kan være besværligt ved hyppige ændringer. I stedet bruger du kommando i kommandoprompten eller PowerShell kan give en mere effektiv måde at administrere disse variable på. Det setx kommandoen tillader brugere at indstille miljøvariabler vedvarende, hvilket er nyttigt for scripts, der kræver, at specifikke værktøjer eller applikationer prioriteres i .

Et andet nyttigt værktøj er kommando, som er et indbygget Windows-værktøj, der opfører sig på samme måde som UNIX kommando. Det kommando kan lokalisere og vise stierne til eksekverbare filer, der matcher søgekriterierne. For eksempel løb where python i kommandoprompten vil en liste over alle placeringer af den eksekverbare Python-fil, der findes i . Dette kan være særligt nyttigt til at identificere og løse konflikter, når flere versioner af et værktøj er installeret. Ved at kombinere brugen af og , kan brugere bedre administrere deres miljø og sikre, at de korrekte versioner af kommandoer udføres.

Ofte stillede spørgsmål om kommandostiproblemer

  1. Hvad er kommando i Windows?
  2. Det kommandoen i Windows lokaliserer og viser stierne til eksekverbare filer, der matcher søgekriterierne.
  3. Hvordan redigerer jeg miljøvariabel?
  4. Du kan redigere variabel gennem System Properties-grænsefladen eller ved at bruge kommando i kommandoprompt eller PowerShell.
  5. Kan jeg bruge PowerShell til at finde stien til en kommando?
  6. Ja, PowerShell kan bruges til at finde stien til en kommando ved at bruge et script, der itererer gennem de mapper, der er angivet i miljøvariabel.
  7. Hvad er forskellen mellem og i kommandoprompt?
  8. Det kommando indstiller kun miljøvariabler for den aktuelle session, mens sætter dem vedvarende på tværs af sessioner.
  9. Hvordan kan jeg kontrollere, om en fil er eksekverbar i Python?
  10. Du kan kontrollere, om en fil er eksekverbar i Python ved hjælp af .
  11. Hvad gør gøre i Python?
  12. Det attribut giver den sti-separator, der bruges af operativsystemet, som er et semikolon (;) på Windows.

Effektiv styring og lokalisering af kommandostier på Windows-kommandolinjen er afgørende for at undgå konflikter og sikre korrekt scriptudførelse. Ved at bruge batch-filer, PowerShell-scripts og Python kan brugere replikere funktionaliteten af ​​UNIX 'which'-kommandoen. Derudover kan udnyttelse af værktøjer som where-kommandoen og styring af PATH-variablen yderligere strømline denne proces. Disse teknikker giver robuste løsninger til at opretholde et rent og effektivt udviklingsmiljø, der hjælper brugerne med hurtigt at identificere og løse sti-relaterede problemer.