【问题标题】:Can you use %username% in a directory path when searching for files?搜索文件时可以在目录路径中使用 %username% 吗?
【发布时间】:2019-05-14 19:43:02
【问题描述】:

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

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

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

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

【问题讨论】:

  • (1) 是不是需要查看的桌面文件夹?如果是这样,您是否只想看看里面有什么? (2) 或者您是否需要从桌面文件夹深入几层?

标签: powershell


【解决方案1】:

尝试使用$env:username 而不是%username%

Get-childitem \server\$env:username\desktop\ -filter file.ini
Get-ChildItem -path \server\$env:username\desktop\ -filter file.ini

【讨论】:

  • 只带回目录中带有我的用户 ID 的文件。我需要能够扫描所有 2500 个用户才能找到有问题的文件。
【解决方案2】:

PowerShell 处理环境变量的方式与批处理文件略有不同。您需要引用 $env:username 而不是 %username%

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

请注意,这只会搜索当前驱动器,文件夹“server”位于驱动器的根目录中,因此如果您正在处理的驱动器是 C: 驱动器,它只会检查此路径:

C:\server\<username>\desktop\file.ini

您可能希望添加-recurse 开关以使其检查子文件夹,或根据需要采取措施修改路径。如果您打算在远程服务器上查找该文件,您可能想要这样做:

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

【讨论】:

    【解决方案3】:

    对于像桌面这样的位置(所谓的“特殊文件夹”),另一种技术是使用 .NET 为您查找位置。例如:

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

    这将返回如下内容:

    C:\Users\&lt;UserName&gt;\Desktop

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

    这里列出了您可以用来代替“桌面”的所有可能值:

    Environment.SpecialFolder Enum

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

    [Enum]::GetNames([Environment+SpecialFolder])
    
    AdminTools
    ApplicationData
    CDBurning
    CommonAdminTools
    CommonApplicationData
    CommonDesktopDirectory
    CommonDocuments
    CommonMusic
    CommonOemLinks
    CommonPictures
    CommonProgramFiles
    .
    .
    .
    

    【讨论】:

      【解决方案4】:

      所以,我必须有点创意。

      $path=\server\firstlvl\

      '#this 给出了用户名子文件夹的名称

      $getUserDirectory=Get-Childitem -path $path

      foreach($f in $getUserDirectory){

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

      }

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-04-23
        • 1970-01-01
        • 2021-10-27
        • 2013-02-20
        • 1970-01-01
        • 2015-11-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多