我有一个文件 C:\dir1234\text.pdf。需要将该文件重命名为“dir1234_text.pdf”。我该怎么做?我有数百个与“dir1234”名称相似的目录,每个目录都包含一个名为“text.pdf”的文件。我猜我需要一个 for-next 循环来遍历每个目录以重命名每个文件。有什么想法吗?非常感谢。Yury
答案1
虽然我同意不应该只授人以鱼,但用“等你有船再回来……”来欢迎他们可能并不是最好的精神。我们都写了我们的第一个脚本,这可能是第一次有人认为我可以用代码来解决这个问题和/或使用论坛。
太多新论坛成员(这里和其他地方)受到的欢迎是“嗨,很高兴有你,让我们假设你阅读了所有规则,并且想出了一个比你要求的更好的计划。”帖子#1 是一个明显的迹象,表明一个人可能还没有适应这种文化。
仅我的 $.02...
不过,就主题而言,假设您使用的是 Windows 或 Linux,您可以获得一些这种工作变体,尽管这不是我在 Linux 上执行此操作的第一次方法。
使用下面的示例,您应该可以开始尝试和阅读功能示例,而不会直接教您任何东西。我认为,如果您阅读并理解了其中的内容,那么将其修改为实际执行复制的完整解决方案应该只需要最少的努力,并且掌握了基本的理解。如果以下任何内容令人困惑,我们将很乐意协助您解决任何进一步的具体问题。请记住,几乎所有代码都有不同的方法来做同一件事,有时是效率决定了哪种方式是首选,有时是风格决定了哪种方式是首选。在我看来,这甚至不是最好的方法,但它足以展示如何学习做这样的事情。
$files = Get-ChildItem -Path c:\yourpath\ -Include *.txt -Recurse
# $files is a variable that will be assigned the return of the cmdlet Get-ChildItem
# Ref & Syntax => https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.management/get-childitem?view=powershell-6
# Enumerate each file in the collection files
# Ref and Syntax => https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/foreach-object?view=powershell-6
# They will be of type System.IO.FileInfo
# Ref and Syntax => https://docs.microsoft.com/en-us/dotnet/api/system.io.fileinfo?view=netframework-4.8
foreach ($file in $files)
{
#The rest is just getting to the sub parts you need, then combining them
Write-Host "$($file.FullName) would be renamed $($file.Directory.Name)_$($file.Name)"
}
如果您想进一步参与,我或其他人很乐意为您提供进一步的帮助。欢迎加入论坛 :-)