Regex PowerShell是否使用正则表达式批量重命名?Can';我搞不懂这个表达式

Regex PowerShell是否使用正则表达式批量重命名?Can';我搞不懂这个表达式,regex,powershell,Regex,Powershell,因此,我有一组具有以下文件名的文件: 52 39 118 070 13200 5480.txt 83 39 010 392 01000 9970.txt 37 39 880 163 17802 0473.txt 我正在尝试将它们重命名为以下名称: gci Y:\MyFolder -filter '*.txt' | % {rename-item -path $_.fullname -newname "2012 File Description`($($_.basename)`).txt" 201

因此,我有一组具有以下文件名的文件:

52 39 118 070 13200 5480.txt
83 39 010 392 01000 9970.txt
37 39 880 163 17802 0473.txt

我正在尝试将它们重命名为以下名称:

gci Y:\MyFolder -filter '*.txt' | % {rename-item -path $_.fullname -newname "2012 File Description`($($_.basename)`).txt"
2012文件说明(52-39-118-070-13200-5480).txt
2012文件说明(83-39-010-392-01000-9970).txt
2012文件说明(37-39-880-163-17802-0473).txt

但是,我不知道相应的正则表达式是什么,以及如何将其编码到PowerShell中。我看到了大量删除空格或下划线的示例,但没有任何内容可以添加到字符串中

请注意,“2012文件描述”对于所有重命名的文件都是常量。我唯一想更改的是将原始文件名移到括号中,并将空格更改为破折号

多谢各位

"52 39 118 070 13200 5480.txt" -replace "(.*)(\.txt)",'2012 File Description ($1)$2'
给出:

2012文件说明(52 39 118 070 13200 5480).txt

重要提示:替换字符串使用单引号,因为如果美元符号“$”字符出现在用双引号引起来的字符串中,则需要对其进行转义。 或者我可以写:

"52 39 118 070 13200 5480.txt" -replace "(.*)(\.txt)","2012 File Description (`$1)`$2"

你不需要正则表达式。正如Ken在评论中所说,您可以只使用连接(在Powershell中这非常容易)

比如:

gci Y:\MyFolder -filter '*.txt' | % {rename-item -path $_.fullname -newname "2012 File Description`($($_.basename)`).txt"

您可以使用一个内衬(通过管道直接重命名项)完成此操作,但为了简单起见,我使用了
Foreach对象
cmdlet:

Get-ChildItem -Filter *.txt | Foreach-Object{   
   $NewName = '2012 File Description ({0}){1}' -f ($_.BaseName -replace '\s','-'),$_.Extension
   Rename-Item -Path $_.FullName -NewName $NewName 
}

如果您所做的只是在每个字符串的前面添加一个常量短语,将原始名称用括号括起来,并且所有字符串都具有
.txt
扩展名,那么普通的旧字符串连接将比正则表达式工作得更好(并且更容易理解如何操作)。谢谢jon Z。这非常好!也就是说,如何将空格更改为破折号?ls |%{ren$$($u.name-replace'\s','-')}我能够从另一个响应中删除它并修改它。但是我如何将这个函数嵌套到您描述的函数中呢?同时,我将先运行该文件,然后运行您的。(“52 39 118 070 13200 5480.txt”-替换“(.*)(\.txt)”,“2012文件说明($1)$2”)-替换“\s”,之后替换空格。最后你会得到2012年的文件描述(52\u 39\u 118\u 070\u 13200\u 5480)。txt.nice catch-try:((“52 39 118 070 13200 5480.txt”-replace“\s”,“u”)-replace“(.*)(\.txt)”,“2012年文件描述($1)$2”,还有两个快速问题。你为什么用这个匹配字符串时,但“替换字符串时?另外,1美元和2美元是否在括号外工作?我可以从外部调用这些变量吗?它们是否会传递到下一个-replace命令?我怀疑没有…对不起,结构。我不能让换行器工作!有趣。我不知道这一点,但我认为regex还有比这更广泛的应用,不是吗?不过我有一个问题要问你,为什么你以前有第一块钱($\ux?我到处都看到了,我不明白。如果我尝试取出它,我会得到相同的结果。双引号字符串中的
$
指示powershell将下面的内容解释为变量或表达式。在返回括号中的字符串中的属性之前,需要使用它。因此,开始时我的命令带有“ls |%{ren$$($Ug.name)”为什么没有它就可以工作?如果我没有第一个$,字符串会返回什么?我假设rename命令接受变量$中包含的任何内容,然后$将删除扩展名前面的名称,之后您可以进一步修改或匹配输出。但是我不明白为什么它同时工作还有,我该如何添加换行符?常见问题解答上说,这是一个回车符和两个空格…不起作用。=/要处理带有“['']”括号的文件名,而不是
重命名项-Path
使用
重命名项-LiteralPath
。否则,重命名项找不到$全名