当前位置: 首页 > 知识库问答 >
问题:

powershell v2-重命名名称与包含通配符的字符串匹配的文件

田志
2023-03-14

我试图创建一个脚本,用通配符重命名与给定文件名匹配的文件。例如

我有一个包含以下文件的文件夹:

  • 201412180900_filename_123.log
  • 201412181000_filename_123.log
  • 201412181100_filename_456.log
  • filename_789.log

我想扫描这个文件夹,并追加当前时间到任何文件的开头以字'filename'开始

到目前为止,我有以下几点:

$d = Get-Date -format "yyyyMMddHHmm" 
$dir = "C:\test"
$file = "filename*.log"

get-childitem -Path "$dir" | where-object { $_.Name -like "$file" } | rename-item -path $_ -newname $d."_".$_.name

但它不起作用。在我看来,各个部分应该从我对留档的阅读中工作,但显然有些不对劲。如果有人能指出这一点,将不胜感激。

我们越来越近了。似乎重命名项部分中的-path需要是$dir$\u,因为$\u似乎只包含文件名。(get help示例建议它必须是完整路径和文件名)

如果我取出rename item部分并将其替换为%{write host$d“\u”$\ u},它将给出正确的新文件名

但是,简单地将其放入重命名项部分仍然不会更新文件名。

rename-item -path $dir$_ -newname $d"_"$_

成功

正确的语法似乎是:

get-childitem -Path "$dir" | where-object { $_.Name -like "$file" } | %{rename-item -path $dir$_ -newname $d"_"$_}

缺少的元素是%{...}围绕着rename项目部分,使我能够引用$_

共有3个答案

拓拔安邦
2023-03-14

另一种方法是不使用foreach或%,而是使用脚本块:

get-childitem -Path "$dir" -filter $file | rename-item -newname { $d + "_" + $_.name }

有关重命名项,请参见文档中的示例:https://msdn.microsoft.com/en-us/powershell/reference/3.0/microsoft.powershell.management/rename-item还有一个-replace操作符,但它不能使用通配符?哦,您不需要通配符:

get-childitem -Path "$dir" -filter $file | rename-item -newname { $_.name -replace 'filename',($d + '_filename') }
邢起运
2023-03-14

我不记得是PowerShell中的字符串串联运算符(我可能错了)。试试这个:

rename-item -path $_ -newname "$d_$($_.name)"

或者这个

rename-item -path $_ -newname ($d + "_" + $_.name)

甚至这个

rename-item -path $_ -newname ({0}_{1} -f $d,$_.name)

在这里看到答案

漆雕升
2023-03-14
$d = Get-Date -format "yyyyMMddHHmm" 
$dir = "C:\test"
$file = "filename*.log"

get-childitem -Path $dir | where-object { $_.Name -like $file } | %{ rename-item -LiteralPath $_.FullName -NewName "$d`_$($_.name)" }

假设错误与“无法将参数绑定到参数‘Path’”和NewName字符串有关,那么这应该是可行的。

问题包括:

  • 不在foreach样式块中时无法引用$uu(请参见此处)

您可以直接传递给重命名项,而不是将管道对象传递给Foreach对象——但是我不确定如何引用-NewName参数的对象名称。

 类似资料:
  • 我有以下任务在我的 任务zipConfiguration(type:Zip){def myDir=project(':SomeProject').projectDir.toString()'/build/libs/'from myDir archiveName'Output.Zip'destinationDirectory=file($buildDir/libs”)} 项目的的将始终具有一个版本化

  • 使用maven-clean插件,我想删除所有以“tmp”开头的文件夹。这是带有专家通配符的可能性吗?我试过: 这不起作用。

  • 问题内容: 我一直在寻找一个命令,该命令将从当前目录返回文件名中包含字符串的文件。我已经看到和命令可以找到以某些内容开头或结尾的文件。 如何返回文件名中包含字符串的文件列表? 例如,if 是当前目录中的文件。 如何返回此文件和其他包含字符串的文件?使用诸如 问题答案: 用途: 它将在当前目录中找到所有包含“字符串”的文件(如果要递归,则删除),并将其打印在屏幕上。 如果要避免文件包含“:”,则可以

  • 问题内容: 我有一个像这样的字符串: 基本上翻译为a ,我想将其替换为: 转换为。 用很多方法进行了尝试,但是它不起作用可能是因为以不同的方式使用了新行。我尝试了: …以及许多其他方式都没有结果。任何想法在这种情况下如何更换? 问题答案: 使用gawk尝试以下行: 如果要 处理新行,则必须先阅读整个文件:

  • 问题内容: 我可以使用简单的通配符查询,如下所示: 但是,如果我想在字段中使用通配符,那又如何呢?应该如何看待有效查询: 问题答案: 您可以使用query_string,它允许使用字段名通配符和查询文本通配符。 这些线周围的东西:

  • 问题内容: 我试图从数据库中选择多个列,但不是所有列。我要选择的所有列均以“ word”开头。 所以我想用伪代码做到这一点: 或多或少。我没有找到有关如何执行此操作的任何文档- MySQL中可能吗?基本上,我试图在一行中存储一个带有标识符的单词列表,并且当我提取记录时,我想将所有单词与该标识符关联。所有单词都将作为字符串连接在一起,并带有其标识符传递给数组/字典中的另一个函数。 我正在尝试进行FE