gpt4 book ai didi

file - Powershell中的文件和文件夹操作

转载 作者:行者123 更新时间:2023-12-03 00:38:59 25 4
gpt4 key购买 nike

我有一个包含数千个文件名的文件夹。

所有文件名都是相对于用户的userID的。某些用户在此文件夹中有多个文件,因此它将在名称的末尾附加一个数字。即susy.txt,susy1.txt,susy2.txt,carl.txt,carl1.txt等...

我想做的是为具有多个文件的每个用户创建一个特定的文件夹,并将所有关联的文件移动到该文件夹​​中。因此,我注意到有多个可疑文件。因此,我想创建一个名为Susy的文件夹,并将susy.txt,susy1.txt和susy2.txt放入其中……对于所有文件,依此类推。

甚至有可能将其作为批处理文件进行处理,如果可以的话,有人可以指出正确的方向吗?我在编写批处理脚本方面知识很少,并希望以此为契机学习更多信息。

谢谢

最佳答案

这是一种更简单/更紧凑的方法:

Get-ChildItem | ?{$_.Name -match '(\D+)\d*\.txt'} | %{
md $matches[1] -ea SilentlyContinue
Move-Item $_ $matches[1]
}

纯粹主义者可能会说,在尝试创建目录之前,它是对 测试路径的“更好的实践”,但是我通常更喜欢紧凑的代码。如果没有其他决定取决于该目录是否已经存在,则每次尝试创建该目录并忽略错误会更快。

针对OP的评论,有一些解释性注释:
  • ?{ }的简写形式,其中对象根据条件过滤,即仅将满足指定条件的对象向下传递到管道。因此,在这种情况下,它将获取当前目录的列表,并仅选择名称属性与正则表达式匹配的对象。
  • 使用 -match 运算符后,匹配项存储在自动数组变量 $ matches 中。 $ matches [0] 包含字符串的整个匹配部分,以1开头的索引包含匹配组,从左括号的序数位置开始编号,即 $ matches [1] 是从以下位置开始的匹配组遇到的第一个左括号, $ matches [2] 是从第二个左括号开始的匹配组,依此类推。

    在这种情况下,只有一个匹配组, $ matches [1] 包含与(\D+)匹配的字符串部分,即,在第一个数字或点之前的连续非数字字符序列。
  • 关于file - Powershell中的文件和文件夹操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19147674/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com