पथ

2008-10-12 22 views
7

पर फ़ाइल ढूंढना क्या कोई जानता है कि रूट फ़ोल्डर से dir filename.exe/s करने के अलावा PATH पर्यावरणीय चर द्वारा निर्दिष्ट फ़ोल्डर्स में से किसी एक फ़ोल्डर में मौजूद फ़ाइल का स्थान कैसे निर्धारित किया जाए?पथ

मुझे पता है कि यह एक प्रोग्रामिंग प्रश्न की सीमाओं को खींच रहा है लेकिन यह तैनाती से संबंधित मुद्दों के लिए उपयोगी है, मुझे भी निष्पादन योग्य की निर्भरताओं की जांच करने की आवश्यकता है। :-)

उत्तर

31

C:\Windows\System32 निर्देशिका में आप where.exe उपयोगिता का उपयोग कर सकते हैं।

+0

पर पर कुछ विवरण के साथ जवाब ब्लॉग धन्यवाद - लघु लेकिन मीठा, मैं वहाँ पता था कि यह के लिए एक सरल कमांड लाइन उपकरण था ...! – ljs

+0

किस ओएस के लिए? मुझे अपने विंडोज एक्सपी सिस्टम पर कहीं भी "where.exe" नहीं मिल रहा है। Win12K के बाद से –

+1

WHERE.EXE जहाजों के साथ Windows XP Server 2003 और साथ ही Windows संसाधन किट के साथ जहाज। यह वीएस2005 के साथ भी शामिल है, लेकिन 2008 नहीं (सी: \ प्रोग्राम फ़ाइलें \ माइक्रोसॉफ्ट विजुअल स्टूडियो 8 \ कॉमन 7 \ टूल्स \ बिन \ Where.Exe)। – raven

1

खिड़कियों पर मैं कहना चाहता हूँ तो मैं कुछ लोगों की कल्पना इस सवाल (अपने आप की तरह) उनके मन पर एक POSIX ओएस के साथ ही की तलाश में मिल सकती है उपयोग %WINDIR%\system32\where.exe

आपके प्रश्नों शीर्षक खिड़कियों निर्दिष्ट नहीं है।

यह php टुकड़ा उन्हें मदद कर सकता है:

<?php 
function Find($file) 
{ 
    foreach(explode(':', $_ENV('PATH')) as $dir) 
    { 
     $command = sprintf('find -L %s -name "%s" -print', $dir, $file); 
     $output = array(); 
     $result = -1; 
     exec($command, $output, $result); 

     if (count($output) == 1) 
     { 
      return($output[ 0 ]); 
     } 
    } 
    return null; 
} 
?> 

यह थोड़ा बदल दिया जाता है उत्पादन कोड मैं कई सर्वर पर चल रहा हूँ। एमएस (यानी OO परिप्रेक्ष्य में ले लिया और कुछ स्वच्छता और त्रुटि संक्षिप्तता के लिए बाहर की जाँच के लिए छोड़ दिया।)

+0

टैग विंडोज़ कहा गया। – jop

+0

मुझे पता है, लेकिन – Kris

+0

पोस्ट करने से पहले टैग को नहीं देखा, यह अभी भी उपयोगी है, धन्यवाद! मैं अवसर पर यूनिक्स का उपयोग करता हूं। – ljs

-1

बस के लिए kicks, यहाँ एक एक लाइनर powershell कार्यान्वयन

function PSwhere($file) { $env:Path.Split(";") | ? { test-path $_\$file* } } 
+0

यह काम नहीं करता है, क्योंकि 'पथ' में पथों में ';' भी हो सकता है (और तब उद्धृत किया गया है)। – Joey

+0

उसे एहसास नहीं हुआ। अच्छा बिंदु –

0

'जो' के अलावा है (विंडोज़) और 'कहां' (यूनिक्स/लिनक्स) यूटिलिटीज, मैंने अपनी खुद की उपयोगिता लिखी है जिसे मैं 'ढूंढनेपाथ' कहता हूं। निष्पादन योग्य को निष्पादित करने के अलावा, यदि कमांड लाइन दुभाषिया (सीएलआई) को सौंप दिया गया है, तो यह सभी मैचों को मिलेगा, पथ-खोज-आदेश लौटाएगा ताकि आप पथ-आदेश की समस्याएं पा सकें। इसके अतिरिक्त, मेरी उपयोगिता केवल निष्पादन योग्य नहीं होती है, लेकिन किसी फ़ाइल-विनिर्देश मिलान को उस समय पकड़ने के लिए जब वांछित फ़ाइल वास्तव में निष्पादन योग्य नहीं होती है।

मैंने एक ऐसी सुविधा भी जोड़ दी जो बहुत निफ्टी हो गई है; ध्वज ध्वज इसे सिस्टम पथ की खोज करने के लिए कहता है, लेकिन सिस्टम डिस्क पर सबकुछ ज्ञात उपयोगकर्ता-निर्देशिकाओं को छोड़ दिया जाता है। मैं पाया है सिस्टम प्रशासन कार्यों में अविश्वसनीय रूप से उपयोगी होने के लिए इस सुविधा ...

यहाँ 'उपयोग' उत्पादन है: कठिन

usage: findinpath [ -p <path> | -path <path> ] | [ -s | -system ] <file> 
    or findinpath [ -h | -help ] 

where: <file> may be any file spec, including wild cards 

     -h or -help returns this text 

     -p or -path uses the specified path instead of the PATH environment variable. 

     -s or -system searches the system disk, skipping /d /l/ /nfs and /users 

इस तरह के एक उपयोगिता लेखन नहीं है और मैं एक व्यायाम के रूप में यह छोड़ देंगे पाठक के लिए। या, अगर यहां पूछा गया, तो मैं अपनी स्क्रिप्ट पोस्ट करूंगा - इसे 'बैश' में।

2

यदि आप एपीआई स्तर पर फ़ाइल का पता लगाना चाहते हैं, तो आप PathFindOnPath का उपयोग कर सकते हैं। यदि आप सिस्टम या वर्तमान उपयोगकर्ता पथ के अलावा अतिरिक्त स्थानों में खोजना चाहते हैं, तो इसमें अतिरिक्त निर्देशिका निर्दिष्ट करने में सक्षम होने का अतिरिक्त बोनस है।

4

WindowsNT आधारित प्रणाली के लिए:

for %i in (file) do @echo %~dp$PATH:i 

फ़ाइल आप देख रहे हैं के नाम के साथ file बदलें।

+0

+1 उन कुछ स्थानों में से एक है जहां सर्च इंजन ऐसे समाधान के साथ आए जो किसी तीसरे पक्ष के उपकरण के बिना काम करता है। धन्यवाद! –

+0

आप किसी भी $ पर्यावरण के साथ $ PATH को प्रतिस्थापित कर सकते हैं, और गैर-बाइनरी फ़ाइलों को भी देख सकते हैं। मुझे जिस चीज की जरूरत थी! –

+1

'% e में (% PATHEXT%) का उपयोग करें @ (% x में (फ़ाइल% ई) के लिए @if ~"% ~ $ पथ: x "==" "@ echo।% ~ $ पाथ: x) 'अगर आप विस्तार नहीं जानते हैं। – Joey

1

विंडोज़ पर पावरशेल का उपयोग ...

Function Get-ENVPathFolders { 
#.Synopsis Split $env:Path into an array 
#.Notes 
# - Handle 1) folders ending in a backslash 2) double-quoted folders 3) folders with semicolons 4) folders with spaces 5) double-semicolons i.e. blanks 
# - Example path: 'C:\WINDOWS\;"C:\Path with semicolon; in the middle";"E:\Path with semicolon at the end;";;C:\Program Files; 
# - 2018/01/30 by [email protected] - Created 
$NewPath = @() 
$env:Path.ToString().TrimEnd(';') -split '(?=["])' | ForEach-Object { #remove a trailing semicolon from the path then split it into an array using a double-quote as the delimeter keeping the delimeter 
    If ($_ -eq '";') { # throw away a blank line 
    } ElseIf ($_.ToString().StartsWith('";')) { # if line starts with "; remove the "; and any trailing backslash 
     $NewPath += ($_.ToString().TrimStart('";')).TrimEnd('\') 
    } ElseIf ($_.ToString().StartsWith('"')) { # if line starts with " remove the " and any trailing backslash 
     $NewPath += ($_.ToString().TrimStart('"')).TrimEnd('\') #$_ + '"' 
    } Else {         # split by semicolon and remove any trailing backslash 
     $_.ToString().Split(';') | ForEach-Object { If ($_.Length -gt 0) { $NewPath += $_.TrimEnd('\') } } 
    } 
} 
Return $NewPath 
} 

$myFile = 'desktop.ini' 
Get-ENVPathFolders | ForEach-Object { If (Test-Path -Path $_\$myFile) { Write-Output "Found [$_\$myFile]" } } 

मैं भी http://blogs.catapultsystems.com/chsimmons/archive/2018/01/30/parse-envpath-with-powershell

संबंधित मुद्दे