搜索文件时,可以在目录路径中使用%username%吗?

时间:2019-05-14 19:43:02

标签: powershell

我正在尝试搜索文件,但是我试图限制搜索时必须触摸的文件数量,因为我要查找的是特定的子文件夹。但是,子文件夹嵌套在服务器上的用户文件夹中

我尝试使用Get-childitem \ server \%username%\ desktop \ -filter file.ini

Get-ChildItem -path \ server \%username%\ desktop \ -filter file.ini

它炸毁了用户名。我不需要搜索所有上述文件夹,只需搜索特定的子文件夹,但似乎无法绕过用户变量。

4 个答案:

答案 0 :(得分:1)

尝试使用%username%代替Get-childitem \server\$env:username\desktop\ -filter file.ini Get-ChildItem -path \server\$env:username\desktop\ -filter file.ini

WebMock::NetConnectNotAllowedError:Real HTTP connections are disabled. 
Unregistered request:Get,https://maps.googleapis.com/maps/api/timezone/json?key=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX&location=7.223929254996364,41.91576628703643&timestamp=1557862636 
   with headers {'Accept'=>'*/*', 
                 'Accept-Encoding'=>'gzip, deflate', 
                 'Host'=>'maps.googleapis.com', 
                 'User-Agent'=>'rest-client/2.0.2 (darwin18.0.0 x86_64) ruby/2.4.1p111'}

答案 1 :(得分:0)

PowerShell处理环境变量的方式与批处理文件略有不同。您将要引用 for (var i = 0; i < toggleableLayerIds.length; i++) { var id = toggleableLayerIds[i]; var link = document.createElement('a'); link.href = '#'; link.className = 'active'; link.textContent = id; link.onclick = function (e) { var clickedLayer = this.textContent; e.preventDefault(); e.stopPropagation(); var visibility = map.getLayoutProperty(clickedLayer, 'visibility'); if (visibility === 'visible') { map.setLayoutProperty(clickedLayer, 'visibility', 'none'); this.className = ''; } else { this.className = 'active'; map.setLayoutProperty(clickedLayer, 'visibility', 'visible'); } }; var layers = document.getElementById('menu'); layers.appendChild(link); } 而不是%username%

$env:username

请记住,这只会在文件夹“ server”位于驱动器根目录中的情况下搜索当前驱动器,因此,如果您正在使用的驱动器是C:驱动器,它将仅检查以下路径: / p>

Get-ChildItem "\server\$env:username\desktop\" -filter 'file.ini'

您可能想要添加C:\server\<username>\desktop\file.ini 开关以使其检查子文件夹,或者根据需要采取措施来修改路径。如果您打算在远程服务器上查找文件,则可能需要这样做:

-recurse

答案 2 :(得分:0)

对于诸如台式机(所谓的“特殊文件夹”)之类的位置,另一种技术是使用.NET为您查找位置。例如:

$desktop = [Environment]::GetFolderPath("Desktop")

这将返回如下内容:

C:\Users\<UserName>\Desktop

优点是您不需要知道路径的任何部分(例如驱动器号),只需知道所需的特定文件夹即可。缺点是它只能在本地运行,因此您不能将其指向远程服务器并从它们那里获取值(尽管它应该通过PowerShell Remoting运行)。

这里是您可以代替“桌面”使用的所有可能值的列表:

Environment.SpecialFolder Enum

或者您可以通过编程方式获取它们:

[Enum]::GetNames([Environment+SpecialFolder])

AdminTools
ApplicationData
CDBurning
CommonAdminTools
CommonApplicationData
CommonDesktopDirectory
CommonDocuments
CommonMusic
CommonOemLinks
CommonPictures
CommonProgramFiles
.
.
.

答案 3 :(得分:0)

所以,我必须有一点创意。

$ path = \ server \ firstlvl \

'#这给了我用户名子文件夹的名称

$ getUserDirectory =获取子项-path $ path

foreach($ getUserDirectory中的$ f){

$ getMyFile = Get-ChildItem -path $ path $ f \ Data -recurse -filter notes.ini

}

这使我进入目录,以便随后可以开始扫描文件并随后检查其内容以查找需要的内容。