Я пытаюсь найти путь, чтобы запустить команду. Я не хочу искать файл, а вместо этого ищу полное имя папки, включая букву диска. Часто буква диска пути меняется, поэтому мне нужно проверить несколько разных букв диска, чтобы найти папку, содержащую мои файлы.
Иногда файл будет существовать с тем же именем в нескольких местах с буквой диска. Это нормально, но мне нужно определить папку, в которой каждый из них сохранен. В настоящее время я создал этот уродливый однострочник, который работает, но не совсем то, что мне нужно ... Из-за того, что я не понял, как это сделать, я создал файл, который могу сохранить по пути, который мне нужно найти, так что у меня есть цель, которую я могу найти .... этот файл называется file.txt
get-childItem -path f:\,g:\,h:\ -recurse -include file.txt
Некоторые устройства, на которых я запускаю это, не имеют всех дисков, поэтому возникает больше уродства, и я устанавливаю переменную и включите некоторые -erroraction, чтобы продолжить, даже если буква диска не найдена ...
$path= Get-ChildItem -Path f:\, g:\, h:\ -Recurse -Include file.txt -ErrorAction SilentlyContinue
Я уверен, что должен быть более элегантный способ достижения sh цели ... Я действительно просто хотите найти путь к папке, содержащей определенные c имена файлов, независимо от буквы диска. Мне не нужен файл file.txt или какой-либо другой код. Я просто хочу решить эту проблему и узнать, как лучше всего это сделать с помощью PowerShell. У меня есть достойный пакетный сценарий для этого, но я пытаюсь переписать его с помощью чистого PowerShell.
FOR %%i IN (C D E F G H I J K L N M O P Q R S T U V W X Y Z) DO (
IF EXIST %%i:\scripts\file.txt (
ECHO Script found at %%i
)
)
Эта пакетная версия отлично работает, и я могу запустить свою команду и ссылаться на переменную %% i как на путь, по которому находится мой файл ... но я хочу преобразовать его в PowerShell.
Я видел некоторые другие темы на этом сайте, но я не добился большого прогресса, и я терплю неудачу .. Есть ли лучший путь?
$Drives = "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"
foreach ($Drive in $Drives) {
if (Test-Path "${Drive}:\file.txt") {
$FileLocation = $Drive
}
}
Write-Host $FileLocation