【问题标题】:Creating folders and moving files in powershell在 powershell 中创建文件夹和移动文件
【发布时间】:2017-01-19 10:33:51
【问题描述】:

我有一个包含数千个不同名称的文件(比如说 .txt)的文件夹:

VBH_V001.txt
VDD_V001.txt
DTG_V001.txt
ADC_V001.txt
DFD_V001.txt
etc....

我需要在该文件夹中使用每个文件的名称创建目录,然后将这些文件移动到目录中。结果应该是例如名为 VBH 的文件夹(没有 _V001.txt),在该文件夹中我应该有 VBH_V001.txt 文件。我怎样才能做到这一点。请指教。

【问题讨论】:

  • 我从未使用过 PowerShell,但必须使用它来执行此任务。所以对语法不是很熟悉。
  • SO 不是我们为您工作的地方。您应该至少对所使用的语言有基本的了解,并诚实地尝试自己解决问题(显示您当前拥有的代码,并解释哪些不符合预期)。

标签: powershell


【解决方案1】:
cd <path to your folder>
  $files = Get-ChildItem -file;
  ForEach ($file in $files)
  {
    $folder = New-Item -type directory -name $file.BaseName;
    Move-Item $file.FullName $folder.FullName;
  }

此脚本为每个文件创建一个目录并将文件移动到该目录。要从目录名称中排除 _V001,可以在 $file.BaseName 上调用 TrimEnd 方法 -

$file.BaseName.TrimEnd ("_V001")

一步一步来。

  1. 首先,转到包含您的文件的目录。
  2. 使用带有 -file 属性的 Get-ChildItem cmdlet 获取代表文件的对象列表。这些对象包含属性 - 例如 BaseName、FullName 等。
  3. 将此列表保存到 $files 变量。
  4. 使用 ForEach 遍历列表。
  5. 在 ForEach 正文中,使用 New-Item cmdlet 为每个文件创建一个目录。 -type 属性指定新项目的类型(-type 目录),因为 -name 属性替换了 $file.BaseName 属性。 BaseName 属性返回一个带有文件名的字符串,不带扩展名和路径。
  6. 将新建目录的对象保存到$folder变量中。

  7. 使用 Move-Item cmdlet 移动文件。此 cmdlet 需要两个属性:源路径和目标路径。作为源路径,使用文件对象的 FullName 属性和目标路径的目录对象的 FullName 属性。 FullName 属性返回包含完整路径的文件或目录的名称,例如 D:\directory\file.txt 表示文件,D:\directory\anotherDirectory 表示目录。

其实没什么大不了的,而且如果没有捷径,它看起来就像是一门简单的英语。

【讨论】:

  • 完成。当然,这一切都取决于具体情况,但我认为,你会抓住主要思想。
【解决方案2】:

您基本上需要做的是:

  1. Get a list of files in a selected folder 通过 PowerShell。
  2. 创建新文件夹in a loop by using the New-Item cmdlet 的名称由所选文件的using substring of a name 命名。
  3. 对于每个文件,将文件移动到新位置 using the Move-Item cmdlet.

希望对您有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-19
    • 2014-05-08
    • 2022-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多