我正在尝试使用tf rename
,TFS和正则表达式递归重命名一堆PowerShell文件夹,但我遇到了PowerShell的一些问题,因为我没有花费很多时间。这是我到目前为止用5
取代领先的2.3.2
但它无效的原因:
dir | foreach { tf rename $_ { $_.Name -replace '^5', '2.3.2' } }
实际结果:
Unrecognized command option 'encodedCommand'. Unrecognized command option 'encodedCommand'. Unrecognized command option 'encodedCommand'. Unrecognized command option 'encodedCommand'. ...etc.
更新
通过以下方式我更接近:
dir | foreach { $newname = $_.Name -replace "^5", "2.3.2"; tf rename $_ $newname }
我的下一个目标是使这个recurse子目录,但这似乎更具挑战性(将其更改为dir -recurse
使其在父文件夹之后因某种原因退出。)
答案 0 :(得分:14)
我首先按5 *进行过滤,因此您只处理以5开头的名称。此外,在这种情况下,由于tf.exe不是PowerShell cmdlet,因此您不希望使用scriptblock来确定新名称。只需使用这样的分组表达式:
dir -filter 5* | foreach { tf rename $_ ($_.Name -replace '^5', '2.3.2')}
顺便说一句,当您尝试调试传递给这样的本机EXE的参数时,使用PowerShell Community Extensions中的echoargs.exe实用程序非常有帮助。这就是它告诉我你原来的方法:
6# dir -filter 5* | foreach { echoargs rename $_ { $_.Name -replace '^5', '2.3.2' } }
Arg 0 is <rename>
Arg 1 is <5foo.txt>
Arg 2 is <-encodedCommand>
Arg 3 is <IAAkAF8ALgBOAGEAbQBlACAALQByAGUAcABsAGEAYwBlACAAJwBeADUAJwAsACAAJwAyAC4AMwAuADIAJwAgAA==>
Arg 4 is <-inputFormat>
Arg 5 is <xml>
Arg 6 is <-outputFormat>
Arg 7 is <text>
答案 1 :(得分:4)
注意:
答案 2 :(得分:1)
试试这个:
dir . | foreach { $newname = $_.Name -replace "^5", "2.3.2"; tf rename $_ $newname }
答案 3 :(得分:0)
运行上述命令要求tf.exe被别名为'tf'..或至少在我的机器上已经别名。
运行此命令:
Set-Alias tf "C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\Common7\IDE\CommonExtensions\Microsoft\TeamFoundation\Team Explorer\tf.exe"
适当地将路径更新为tf.exe
还可以考虑将该行添加到您的个人资料中,以备将来使用
notepad $PROFILE