使用Powershell将文件夹结构中的文件复制到各自的子文件夹中

使用Powershell将文件夹结构中的文件复制到各自的子文件夹中,powershell,batch-file,move,Powershell,Batch File,Move,我想将每个文件夹中的文件“file_to_move.txt”移动到各自的“done”文件夹中 因此C:\Temp\test\folder1中的文件\u to_move.txt被移动到C:\Temp\test\folder1\done 而C:\Temp\test\folder2中的文件\u to_move.txt被移动到C:\Temp\test\folder2\done …依此类推,最好在文件名中添加%date%\uuu%time% 如果文件夹(如下面示例中的folder4)没有文件_to_mov

我想将每个文件夹中的文件“file_to_move.txt”移动到各自的“done”文件夹中

因此C:\Temp\test\folder1中的文件\u to_move.txt被移动到C:\Temp\test\folder1\doneC:\Temp\test\folder2中的文件\u to_move.txt被移动到C:\Temp\test\folder2\done

…依此类推,最好在文件名中添加%date%\uuu%time%

如果文件夹(如下面示例中的folder4)没有文件_to_move.txt,脚本应该忽略它并继续

文件夹结构示例:

  • C:\Temp\test\DONE
  • C:\Temp\test\folder1
  • C:\Temp\test\folder1\done
  • C:\Temp\test\folder1\some\u other\u文件夹
  • C:\Temp\test\folder1\some\u other\u file.txt
  • C:\Temp\test\folder1\file\u to\u move.txt
  • C:\Temp\test\folder2
  • C:\Temp\test\folder2\done
  • C:\Temp\test\folder2\some\u other\u文件夹
  • C:\Temp\test\folder2\some\u other\u file.txt
  • C:\Temp\test\folder2\file\u to\u move.txt
  • C:\Temp\test\folder3
  • C:\Temp\test\folder3\done
  • C:\Temp\test\folder3\some\u other\u文件夹
  • C:\Temp\test\folder3\some\u other\u file.txt
  • C:\Temp\test\folder3\file\u to\u move.txt
  • C:\Temp\test\folder4
  • C:\Temp\test\folder4\done
  • C:\Temp\test\folder4\some\u other\u文件夹
  • C:\Temp\test\folder4\some\u other\u file.txt
我已经尝试过Powershell脚本,即使我不是很擅长,我不知道它可以在标准的批处理脚本中完成。 到目前为止,我已经尝试过:

在批处理脚本中:

SET ThisScriptsDirectory=%~dp0
SET PowerShellScriptPath=%ThisScriptsDirectory%bin\movescript.ps1
PowerShell -NoProfile -ExecutionPolicy Bypass -Command "& '%PowerShellScriptPath%'"
在movescript.ps1中:

Move-Item C:\Temp\test\*\file_to_move.txt C:\Temp\test\*\done\file_to_move_$(get-date -f yyyyMMdd_HHmmss).txt
但这是行不通的。 我想它不够精确,无法工作

作为奖励,整个过程可以在基本脚本中完成,还是必须使用外部.PS1文件?

您可以使用带有过滤器的cmdlet从路径递归检索所有
文件到\u move.txt
文件。使用(别名foreach)对它们进行迭代,并使用cmdlet组合新路径。要复制项目,可以使用cmdlet:

如果要添加时间戳,可以使用cmdlet并使用所需格式调用
ToString
方法,例如:

(Get-Date).ToString("yyyy-dd-M_HH-mm-ss")
输出:

2016-05-4_15-06-02
现在,您可以使用格式字符串和foreach循环中的
$\uu0.Basename
$\u0.Extension
属性来解析文件名。我将把这个作为练习留给你

您可以使用带有筛选器的cmdlet从路径中递归检索所有
文件\u to_move.txt
文件。使用(别名foreach)对它们进行迭代,并使用cmdlet组合新路径。要复制项目,可以使用cmdlet:

如果要添加时间戳,可以使用cmdlet并使用所需格式调用
ToString
方法,例如:

(Get-Date).ToString("yyyy-dd-M_HH-mm-ss")
输出:

2016-05-4_15-06-02
现在,您可以使用格式字符串和foreach循环中的
$\uu0.Basename
$\u0.Extension
属性来解析文件名。我将把这个作为练习留给你