Powershell:仅知道部分名称时重命名文件夹

Powershell:仅知道部分名称时重命名文件夹,powershell,Powershell,我需要在不知道文件夹全名的情况下重命名文件夹 例如C:\myfolder-2021-5-1(我知道文件夹名称的第一部分) 我想将其重命名为c:\myfolder。。。同样,脚本并不总是知道完整的文件夹名 编辑:我是Powershell的新手。我在Google上花了几个小时,没有看到有人试图用通配符重命名文件夹的例子。我能找到的文件夹重命名示例很少。我发现的大部分内容都与重命名文件而不是文件夹有关 我知道人们希望我先“尝试”,然后再问问题。但是,有时候,特别是对我们这些新手来说,我们甚至不知道从哪

我需要在不知道文件夹全名的情况下重命名文件夹

例如C:\myfolder-2021-5-1(我知道文件夹名称的第一部分)

我想将其重命名为c:\myfolder。。。同样,脚本并不总是知道完整的文件夹名

编辑:我是Powershell的新手。我在Google上花了几个小时,没有看到有人试图用通配符重命名文件夹的例子。我能找到的文件夹重命名示例很少。我发现的大部分内容都与重命名文件而不是文件夹有关

我知道人们希望我先“尝试”,然后再问问题。但是,有时候,特别是对我们这些新手来说,我们甚至不知道从哪里开始

我尝试使用几个文件名示例,只使用带有通配符的目录名,但没有成功

不知道还能说什么

有什么想法吗


谢谢

如果你不知道目录的名称,你就不能重命名它——这不是文件和目录的工作方式。您可以做的是搜索与您的条件匹配的目录,然后可以重命名它

(我假设你不知道确切名称的原因是因为它是一个日期,但我也假设目录名的格式是一致的)

在最基本的层面上,这适用于您的示例:

get-childitem -Path c:\ -Directory -Filter "myfolder-????-*-*" | Move-Item -Destination "renamed-myfolder"
这将在C:\中搜索与模式
“myfolder-??-*-*-*”
匹配的目录,因此此模式将与示例文件夹
C:\ myfolder-2021-5-1
匹配。然后将该目录沿着管道(
|
)传递到移动项中,在移动项中该目录被重命名为
c:\renamed myfolder

这段代码有一些主要的缺点!在尝试重命名目录之前,它不会检查新名称是否存在,因此可能会失败。此外,如果有多个文件夹与筛选器匹配,则仅第一次重命名(
移动项目
)将成功。您需要考虑这些边缘情况,并添加适当的逻辑来检测/防止它们

最好使用
测试路径
命令检查目标名称是否已存在:

if(Test-Path -Path c:\renamed-myfolder){
  throw "ERROR - c:\renamed-myfolder already exists!";
}

注意:Get ChildItem筛选器
*
表示“任何字符”,而
表示“一个字符”,因此
“myfolder-*-*-*”
也可以工作,但如果年份始终为4位,则使用
??
作为更具体的数字。我使用了过滤器“myfolder-??-*-*-*”,因为我假设某些天/月是两位数,比如
myfolder-2021-12-12

您好,欢迎光临。你介意给我们看看你试过的吗?这是非常基本的东西,我相信你能做到(:请回答问题,并展示一些当前名称和所需名称的示例。解释重命名规则是什么;如果可能,请涵盖所有边缘情况。这就是为什么我要求提供要重命名的名称示例以及所需的新名称。边缘情况是麻烦的情况。例如:假设,您只想删除所有数字和破折号。这是si但是:如果你得到了
myThing-1
myThing-2
,会发生什么?不能同时有两个
myThing
,因此重命名规则需要以某种方式对此进行解释,或者整个过程应该停止并抱怨名称不明确。