我有一个文件夹(位于服务器 A 的学生),其中包含 800 个文件,每个文件在文件名的前 6 个字符中都有一个唯一标识符(例如 Y9L-01_xxx.xlsx;Y9L-02_xxx.xlsx;Y9L-03_xxx.xlsx 等)。
我有文件夹和子文件夹,我想将文件传输到这些文件夹中。这些文件夹位于服务器 B 中。
上面 2 中的每个文件夹在文件夹名称开头都包含相同的 6 个字符的文件名唯一标识符(Y9L-01;Y9L-02;Y9L-03)。文件夹 Y9L-01;Y9L-02;Y9L-03 下有一个名为 2014_Hockey 的子文件夹;
我想要将上述 1 中描述的“Students”文件夹中的文件传输到上述 2 和 3 中描述的 Y9L-01、T9L-02、Y9L-03 等下的 2014_Hockey 文件夹中。
实际上,我希望脚本将文件名的前 6 个字符与#3 中描述的文件夹名称的前 6 个字符进行匹配,然后将文件移动到该文件夹下的 2014_Hockey 文件夹中。
示例:将位于服务器 A 中的 \Students\Y9L-01_HockeyChampionship.xslx 中的 .xslx 文件移动到位于服务器 B 中的 Y9L-01\2014_Hockey
我该怎么做呢?
谢谢
问候 Rauri
答案1
使用 PowerShell 应该可以轻松完成此操作。我还没有亲自测试过,因此在实际文件上使用它之前,您应该先在一些示例数据上尝试一下。
Get-ChildItem '\\ServerA\Students' | ForEach-Object {$NewFolder = $_.Name.Substring(0,6); Move-Item $_ "\\ServerB\$NewFolder\2014_Hockey"}
如果\\ServerA\Students
不符合您指定的命名约定。
例如,这将执行以下操作:
\\ServerA\Students\Y9L-01_HockeyChampionship.xlsx
将移至
\\ServerB\Y9L-01\2014_Hockey\Y9L-01_HockeyChampoinship.xlsx
如果你需要仅有的移动 Excel 文件,您需要通过Where-Object
如下方式添加来过滤掉其余文件:
Get-ChildItem '\\ServerA\Students' | Where-Object {$_.Extension -eq '.xlsx'} | ForEach-Object {$NewFolder = $_.Name.Substring(0,6); Move-Item $_ "\\ServerB\$NewFolder\2014_Hockey"}