Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Powershell脚本,用于将名称大致相同的文件从文件夹复制到另一个文件夹_Powershell_Batch File - Fatal编程技术网

Powershell脚本,用于将名称大致相同的文件从文件夹复制到另一个文件夹

Powershell脚本,用于将名称大致相同的文件从文件夹复制到另一个文件夹,powershell,batch-file,Powershell,Batch File,在收到近130000个代表发票的xml文件后,我遇到了以下情况 根据发票的创建日期,发票位于文件夹和子文件夹中: 文件夹2016,包含子文件夹:2016-01-01(然后此子文件夹包含xml文件)、2016-01-02(然后此其他子文件夹包含当天发票的xml文件)等等。。。直到2016年12月31日(此子文件夹包含当天发票的xml文件) 文件夹2017,包含子文件夹:2017-01-01(然后此子文件夹包含xml文件)、2017-01-02(然后此其他子文件夹包含当天发票的xml文件)等等。。。

在收到近130000个代表发票的xml文件后,我遇到了以下情况

根据发票的创建日期,发票位于文件夹和子文件夹中:

文件夹2016,包含子文件夹:2016-01-01(然后此子文件夹包含xml文件)、2016-01-02(然后此其他子文件夹包含当天发票的xml文件)等等。。。直到2016年12月31日(此子文件夹包含当天发票的xml文件) 文件夹2017,包含子文件夹:2017-01-01(然后此子文件夹包含xml文件)、2017-01-02(然后此其他子文件夹包含当天发票的xml文件)等等。。。截至2017年12月31日(此子文件夹包含当日发票的xml文件) 等等

但是,这些附件位于不同的文件夹中,并且都堆放在一起。它们可以是PDF、docx甚至PNG。发票和附件之间的唯一链接是文件名。发票长度为32个字符:0bad5e493aa44982bc60d7ed0670465e,附件如下:0bad5e493aa44982bc60d7ed0670465e-1。大多数发票只有一个附件,但其他发票有更多附件,它们看起来是这样的:0bad5e493aa44982bc60d7ed0670465e-2、0bad5e493aa44982bc60d7ed0670465e-3、0bad5e493aa44982bc60d7ed0670465e-4

我需要的是一个脚本,它可以将附件移动到正确的文件夹中,并在其各自的发票旁边

脚本运行后,每个已存在的文件夹将包含当天的发票和该发票的附件:

文件夹2016>子文件夹2016-01-01将包含发票xml 0bad5e493aa44982bc60d7ed0670465e和附件0bad5e493aa44982bc60d7ed0670465e-1、0bad5e493aa44982bc60d7ed0670465e-2、0bad5e493aa44982bc60d7ed0670465e-3以及可能的其他发票及其各自附件

请给我指出正确的方向(我是通过powershell思考的,但我可以尝试其他任何东西),因为这个请求对我来说完全出乎意料,手动完成它将花费一生的时间,而我不是一个程序员

谢谢大家!

试试这个:

Get-ChildItem -Path C:\Invoices\2016 -Include *.xml -Recurse | Select BaseName, DirectoryName | 
   ForEach { Get-ChildItem -Path C:\Attachments -Include "$($_.BaseName)*.*" -Recurse | 
      Move-Item -Destination $_.DirectoryName }
我希望这是你想要的,因为我不确定你的解释。
只需将
C:\Invoices\2016
C:\Attachments
替换为正确的路径即可

也许可以在superuser上试用一下。这对SO来说有点太模糊了。从获取XML文件列表开始。使用
.BaseName
属性访问其名称而不带扩展名,添加
*
以获取相同名称的通配符版本,并使用该版本从另一个a目录获取匹配文件名的列表。此网站不提供代码编写服务。如果您希望我们帮助您解决它所显示的问题,请编写您自己的代码。请尽量避免回答代码请求类型的问题;这些都是StackOverflow的主题。