Powershell 获取文件夹中文件的列表,并使用ForEach&;将其移动到4个子文件夹中;转换
假设我有一个命令,从名为Powershell 获取文件夹中文件的列表,并使用ForEach&;将其移动到4个子文件夹中;转换,powershell,foreach,switch-statement,Powershell,Foreach,Switch Statement,假设我有一个命令,从名为Copy的文件夹中获取4个文件名到一个数组: $Files2 = Get-ChildItem "Copy" -File 在我当前的目录中,有两个文件夹Copy和Work(包含4个文件夹实验室、作业、讲座、脚本) 我的目标是将4个文件从Copy移动到相应的4个文件夹中,并使用匹配的名称。例如,文件Lab12将进入文件夹Labs。我的脚本遇到了一个错误,因为它无法在不更改目录的情况下确定文件的放置位置 $Files2 = Get-ChildItem "Copy" -File
Copy
的文件夹中获取4个文件名到一个数组:
$Files2 = Get-ChildItem "Copy" -File
在我当前的目录中,有两个文件夹Copy
和Work
(包含4个文件夹实验室、作业、讲座、脚本
)
我的目标是将4个文件从Copy
移动到相应的4个文件夹中,并使用匹配的名称。例如,文件Lab12
将进入文件夹Labs
。我的脚本遇到了一个错误,因为它无法在不更改目录的情况下确定文件的放置位置
$Files2 = Get-ChildItem "Copy" -File
Foreach ($i in $Files2) {
Switch -Wildcard ($i) {
("*lec*") {Move-Item $_ -Destination "Lectures"}
("*lab*") {Move-Item $_ -Destination "Labs"}
("*assign*") {Move-Item $_ -Destination "Assignments"}
("*.ps1*") {Move-Item $_ -Destination "Scripts"}
}
$Count = $Count + 1
}
如果在循环之前添加Set Location Work
,它将按预期工作。我在这方面哪里出了问题?我知道它试图在我当前的目录中查找文件,但我很难找到我还没有尝试过的其他可能性。我还没有学会哈希表,所以我使用了开关
编辑:
我还应该说我试着把
-Destination“Work\teaches”
放在我的Switch
语句中,但那也不起作用。不管Olaf怎么建议,你确实可以使用$\ucode>,因为Switch
会遍历数组,和$\u
表示数组中的当前项。您需要指定项目的FullName
属性,或者将$\ucode>导入到移动项目
。您还需要提供有效的相对路径。这可以工作(在我的机器上测试):
不管Olaf如何建议,您确实可以使用$\u
,因为开关
将遍历数组,而$\u
表示数组中的当前项。您需要指定项目的FullName
属性,或者将$\ucode>导入到移动项目
。您还需要提供有效的相对路径。这可以工作(在我的机器上测试):
您正在使用管道变量$\ux,但没有管道。;-)$\uuu
不是指正在测试的阵列的当前项吗?即使如此,代码仍然应该执行,但它不会执行。对于这个脚本,$i
和$\ucode>应该是可互换的。控制台中有一个示例错误:Move Item:找不到路径“C:\Users\Work\Lab12.txt”,因为它不存在。
在循环声明中使用$i,而不是$\ux。如果您不确定是否可以使用写入详细信息来输出变量中的内容或仅用于测试写入主机。您可以使用完整路径而不是相对路径?使用问题中最初发布的代码将$\ucode>更改为$\uFullName
,并将目标更改为相对路径,例如“\Work\toucks”
您正在使用管道变量$\uu,但您没有管道。;-)$\uuu
不是指正在测试的阵列的当前项吗?即使如此,代码仍然应该执行,但它不会执行。对于这个脚本,$i
和$\ucode>应该是可互换的。控制台中有一个示例错误:Move Item:找不到路径“C:\Users\Work\Lab12.txt”,因为它不存在。
在循环声明中使用$i,而不是$\ux。如果您不确定是否可以使用写入详细信息来输出变量中的内容或仅用于测试写入主机。您可以使用完整路径而不是相对路径?使用问题中最初发布的代码将$\ucode>更改为$\uFullName
,并将目标更改为相对路径,例如“\Work\toucks”
$Files2 = Get-ChildItem "Copy" -File
Switch -Wildcard ($Files2) {
("*lec*") {Move-Item $_.FullName -Destination ".\Work\Lectures"}
("*lab*") {Move-Item $_.FullName -Destination ".\Work\Labs"}
("*assign*") {Move-Item $_.FullName -Destination ".\Work\Assignments"}
("*.ps1*") {Move-Item $_.FullName -Destination ".\Work\Scripts"}
}