使用 txt 中的部分文件名列表将文件从一个文件夹复制到另一个文件夹

使用 txt 中的部分文件名列表将文件从一个文件夹复制到另一个文件夹

我在一个文件夹中存储了大量图像,并对它们进行排序,选择将哪些图像复制到特定文件夹(例如“风景”或“技术”),并在文本文件中为每个文件夹创建了部分文件名列表。例如 Scenery.txt

4811
4819
4820

这些是完整文件名的一部分的唯一文件编号,例如:

C:\Users\drewb\Pictures\2018_08_Inuvik\All\DSC_4811.jpg

我在 powershell 中有一个脚本,当我在 .txt 文件中列出了完整文件名时,这个脚本对我很有用,但为了节省时间,由于照片数量较多,我只写了图像编号。我希望有一种方法可以创建此列表的数组,并在循环中将其作为完整文件名中的变量输入,但任何建议都值得赞赏。

对我而言,使用 .txt 中的全名的代码是

Get-Content C:\Users\drewb\Pictures\2018_08_Inuvik\Technical.txt | ForEach-Object {copy-item $_ C:\Users\drewb\Pictures\2018_08_Inuvik\Technical}

已解决:我通过将文件路径与 Excel 中的名称和文件扩展名连接起来,然后使用我之前使用的 PS 脚本解决了这个问题。但是,我觉得一定有更直接的方法可以编写脚本。

答案1

简短回答

如果当前目录包含文件名遵循相同模式的图片DSC_XXXX.jpg(其中XXXX为数字)以及Technical.txt包含其中一些数字的名为的文件,则以下命令会将Technical文件中提供数字的所有文件复制到该文件夹​​(假设它存在于当前目录中)Technical.txt

Get-Content Technical.txt | ForEach-Object { Copy-Item "DSC_$_.jpg" Technical }

如果Technical.txt图片文件和Technical目录不在当前目录中,则必须提供完整路径或相对路径,例如:

Get-Content c:\path1\to\Technical.txt | ForEach-Object { Copy-Item "c:\path2\to\pictures\DSC_$_.jpg" c:\path3\to\Technical }

解释

  • 命令中的表达式"DSC_$_.jpg"用于根据从文件读取的数字生成图片文件名Technical.txt,该文件是当前管道对象(即$_)。它只是添加DSC_为前缀,并.jpg添加为扩展名。
  • 获取内容读取文件的内容Technical.txt
  • ForEach 对象{}对管道中的每个对象执行其脚本块参数(用花括号括起来,即),在本例中,即返回的每一行文本Get-Content

测试此解决方案(在线或本地)

最简单的方法就是尝试此解决方案在线

否则,可以使用以下代码片段来创建在当前目录中一个test文件夹,其中包含一个示例Technical.txt文件和一些遵循此答案中提到的模式的假图片文件以及一个空Technical目录(当心:如果工作目录中已经有一个文件夹,则必须更改.\test为其他内容:test

mkdir -ErrorAction SilentlyContinue .\test\Technical
Out-File .\test\DSC_4811.jpg; Out-File .\test\DSC_4812.jpg; Out-File .\test\DSC_4813.jpg;
Out-File .\test\DSC_4814.jpg; Out-File .\test\DSC_4819.jpg; Out-File .\test\DSC_4820.jpg;
"4811`n4819`n4820" > .\test\Technical.txt

(在第三行中,`n表示行尾字符(反引号 ( `) 是转义字符在 PowerShell 中)。

它会生成以下文件:

.\test\DSC_4811.jpg    .\test\DSC_4812.jpg    .\test\DSC_4813.jpg
.\test\DSC_4814.jpg    .\test\DSC_4819.jpg    .\test\DSC_4820.jpg
.\test\Technical.txt

执行作为答案提供的命令后(Get-Content .\test\Technical.txt | ForEach-Object { Copy-Item ".\test\DSC_$_.jpg" .\test\Technical }),文件为:

.\test\DSC_4811.jpg              .\test\DSC_4812.jpg              .\test\DSC_4813.jpg
.\test\DSC_4814.jpg              .\test\DSC_4819.jpg              .\test\DSC_4820.jpg
.\test\Technical.txt
.\test\Technical\DSC_4811.jpg    .\test\Technical\DSC_4819.jpg    .\test\Technical\DSC_4820.jpg

清理方法:

ri -Recurse .\test

相关内容