在Powershell中使用new-guid重命名每个文件 [英] rename each file with new-guid in powershell

查看:211
本文介绍了在Powershell中使用new-guid重命名每个文件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我一直在尝试使用文件名$New-Guid .txt重命名文件夹中的每个txt文件,因此它们都应该具有唯一的名称.

有人知道这样做的简单方法吗?

解决方案

tl; dr

Get-ChildItem ... | Rename-Item -NewName { "$(New-Guid).txt" }

请注意使用脚本块({ ... })以及对$(...)内部$(...)中的New-Guid的调用,该脚本嵌入在 可扩展字符串("...").


使用此答案.

I have been trying to rename each txt file in a folder with the filename $New-Guid.txt, so they should all have unique names.

Anyone know the simple way to do this?

解决方案

tl;dr

Get-ChildItem ... | Rename-Item -NewName { "$(New-Guid).txt" }

Note the use of a script block ({ ... }) and the call to New-Guid inside $(...) embedded in an expandable string ("...").


File renaming / moving operations with multiple input files are most efficiently performed with delay-bind script blocks, where a script block ({ ... }) passed to the -NewName / -Destination parameter calculates the new name / name and/or location for each input file, which enables specifying the new filename:

  • as a transformation of the input filename
  • and/or as an auto-generated filename based on, e.g., a sequence number, or, as in your case, a GUID.

The following discusses only Rename-Item -NewName, but it applies analogously to Move-Item -Destination, but note an important difference:

  • -NewName for Rename-Item specifies the new name for each input item in its current location, wherever that is.

  • -Destination for Move-Item specifies the new path for each input item, and specifying a relative path, including a mere file name, is relative to the caller's location, irrespective of where the input files are located.

The general pattern is:

Get-ChildItem ... | Rename-Item -NewName { ... }

Note that input files may alternatively be specified via Get-Item, as path strings, or as objects with a .Path property.


Transformation example:

Let's say you want to rename all *.txt files in the current directory by prefixing their names with foo-.

Inside the script block { ... }, automatic variable $_ refers to the input object at hand, as is customary in PowerShell.
With file input from Get-ChildItem, $_ is an instance of class [System.IO.FileInfo], allowing you to access its .Name property to get the file name.

Get-ChildItem *.txt | Rename-Item -NewName { 'foo-' + $_.Name }


Auto-generation example with sequence number:

Let's say you want to rename all *.txt files in the current directory by prefixing their names with a 1-based two-digit sequence number followed by -, e.g., 01-.

$index = 0
Get-ChildItem *.txt |
  Rename-Item -NewName { '{0:00}-{1}' -f ++([ref] $index).Value, $_.Name }

Note: Incrementing $index via ++([ref] $index).Value rather than just ++$index is necessary, because delay-bind script blocks run in a child variable scope, where ++$index would implicitly create a local $index variable - for a more detailed explanation, see this answer.

这篇关于在Powershell中使用new-guid重命名每个文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆