Het volledige pad van een opdracht op de Windows-opdrachtregel vinden

Batch

Inleiding: verborgen opdrachtpaden op Windows blootleggen

Padconflicten kunnen een vaak voorkomend probleem zijn voor ontwikkelaars die met scripts en opdrachten op de Windows-opdrachtregel werken. Wanneer een van uw scripts wordt overschaduwd door een ander programma vanwege de plaatsing ervan in het pad, wordt het van cruciaal belang om het volledige pad van een bepaald commando te identificeren. Dit scenario leidt er vaak toe dat gebruikers op zoek gaan naar een equivalent van het UNIX-commando 'who', wat het vinden van het exacte pad van een commando vereenvoudigt.

Op UNIX-systemen wordt het commando 'welke' gebruikt om het volledige pad van een opgegeven commando weer te geven, wat helpt bij het oplossen van dergelijke schaduwproblemen. Windows-gebruikers kunnen zich echter afvragen of er een soortgelijk hulpprogramma beschikbaar is op hun platform. In de volgende discussie zullen we de beschikbare opties in Windows onderzoeken om dezelfde functionaliteit te bereiken en u te helpen padgerelateerde problemen effectief te beheren.

Commando Beschrijving
setlocal Begint met de lokalisatie van omgevingsvariabelen in een batchbestand, zodat wijzigingen geen invloed hebben op de mondiale omgeving.
for %%i in ("%command%") do Doorloopt de opgegeven set items, waardoor bewerkingen op elk item kunnen worden uitgevoerd.
if exist "%%j\%%~i.exe" Controleert of een specifiek bestand op het opgegeven pad bestaat.
param Definieert en haalt de parameters op die worden doorgegeven aan een PowerShell-script.
Join-Path Combineert twee of meer tekenreeksen in een pad, waarbij scheidingstekens op de juiste manier worden verwerkt in PowerShell.
Test-Path Controleert het bestaan ​​van een opgegeven pad of bestand in PowerShell.
os.pathsep Haalt het padscheidingsteken op dat door het besturingssysteem wordt gebruikt, meestal een puntkomma (;) in Windows.
os.access(exe, os.X_OK) Controleert of een bestand uitvoerbaar is in Python.

Windows-opdrachtregelscripts begrijpen

De meegeleverde scripts zijn allemaal ontworpen om de functionaliteit van UNIX na te bootsen commando, dat wordt gebruikt om het volledige pad van een commando te lokaliseren. Het eerste script gebruikt een batchbestand voor de Windows-opdrachtprompt. Het begint met om veranderingen in omgevingsvariabelen te lokaliseren. Het script stelt vervolgens de opdrachtnaam in op de variabele en controleert of deze leeg is. De for %%i in ("%command%") do loop itereert door de mappen die worden vermeld in de omgevingsvariabele. Binnen deze lus wordt de controleert of het uitvoerbare bestand bestaat in de huidige map van de lus. Indien gevonden, wordt het pad weergegeven en afgesloten.

Het tweede script, geschreven in PowerShell, begint met het definiëren van parameters met . Het script haalt de opdrachtnaam op en splitst de omgevingsvariabele naar individuele mappen met behulp van . De Join-Path command combineert elke map met de opdrachtnaam om potentiële uitvoerbare paden te vormen. Het gebruikt dan om het bestaan ​​van deze paden te controleren. Als het uitvoerbare bestand wordt gevonden, wordt het pad weergegeven en afgesloten. Het derde script, geschreven in Python, definieert een functie om naar de opdracht te zoeken in de mappen die worden vermeld in de omgevingsvariabele. Het gebruikt os.pathsep om de padscheidingsteken van het systeem te verkrijgen en om de uitvoerbaarheid ervan te controleren. Dit script wordt uitgevoerd met een opdrachtregelargument dat de opdrachtnaam specificeert, en drukt het volledige pad af als de opdracht wordt gevonden.

Het volledige pad van een opdracht in Windows bepalen

Windows-opdrachtprompt gebruiken

@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

Opdrachtpaden zoeken in PowerShell

PowerShell-script gebruiken

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"

Commandolocaties vinden met Python

Python-script gebruiken

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

Geavanceerde padbeheertechnieken in Windows

Naast het simpelweg vinden van het volledige pad van een opdracht, het beheren van de omgevingsvariabele is cruciaal voor het vermijden van conflicten en het garanderen van een soepele uitvoering van scripts. In Windows kan men de interface Systeemeigenschappen gebruiken om het variabel, maar dit kan lastig zijn bij frequente wijzigingen. In plaats daarvan gebruikt u de opdracht in de opdrachtprompt of PowerShell kan een efficiëntere manier bieden om deze variabelen te beheren. De setx Met deze opdracht kunnen gebruikers omgevingsvariabelen permanent instellen, wat handig is voor scripts waarvoor specifieke tools of applicaties prioriteit moeten krijgen in de .

Een ander handig hulpmiddel is de opdracht, een ingebouwd Windows-hulpprogramma dat zich op dezelfde manier gedraagt ​​als UNIX commando. De commando kan de paden van uitvoerbare bestanden die aan de zoekcriteria voldoen, lokaliseren en weergeven. Bijvoorbeeld hardlopen where python in de opdrachtprompt worden alle locaties van het uitvoerbare Python-bestand weergegeven in de . Dit kan met name handig zijn bij het identificeren en oplossen van conflicten wanneer er meerdere versies van een tool zijn geïnstalleerd. Door het combineren van het gebruik van En kunnen gebruikers hun omgeving beter beheren en ervoor zorgen dat de juiste versies van opdrachten worden uitgevoerd.

Veelgestelde vragen over problemen met opdrachtpaden

  1. Wat is de opdracht in Windows?
  2. De opdracht in Windows lokaliseert en geeft de paden weer van uitvoerbare bestanden die aan de zoekcriteria voldoen.
  3. Hoe bewerk ik de omgevingsvariabele?
  4. U kunt de variabele via de interface Systeemeigenschappen of met behulp van de opdracht in de opdrachtprompt of PowerShell.
  5. Kan ik PowerShell gebruiken om het pad van een opdracht te vinden?
  6. Ja, PowerShell kan worden gebruikt om het pad van een opdracht te vinden met behulp van een script dat door de mappen loopt die worden vermeld in de omgevingsvariabele.
  7. Wat is het verschil tussen En in de opdrachtprompt?
  8. De command stelt omgevingsvariabelen alleen in voor de huidige sessie, while zet ze persistent over sessies heen.
  9. Hoe kan ik controleren of een bestand uitvoerbaar is in Python?
  10. Met Python kun je controleren of een bestand uitvoerbaar is .
  11. Wat doet doen in Python?
  12. De attribuut biedt het padscheidingsteken dat door het besturingssysteem wordt gebruikt; dit is een puntkomma (;) in Windows.

Het effectief beheren en lokaliseren van opdrachtpaden op de Windows-opdrachtregel is van cruciaal belang om conflicten te voorkomen en een correcte uitvoering van scripts te garanderen. Door gebruik te maken van batchbestanden, PowerShell-scripts en Python kunnen gebruikers de functionaliteit van de UNIX-opdracht 'who' repliceren. Bovendien kan het gebruik van tools zoals de Where-opdracht en het beheren van de PATH-variabele dit proces verder stroomlijnen. Deze technieken bieden robuuste oplossingen om een ​​schone en efficiënte ontwikkelomgeving te behouden, waardoor gebruikers padgerelateerde problemen snel kunnen identificeren en oplossen.