我在C:\temp
中有这样的目录结构
a
|
+--aa (folder)
| +
| +-- subfile1.zip
|
+- file.txt
z
|
+--hh (folder)
| |
| +-- subfile2.txt
|
+- file2.txt
c
|
+--kku (folder)
| |
| +-- subfile3.txt
|
+- file3.txt
我只想移入这些路径中的C:\temp
文件
C:\temp\a
C:\temp\z
C:\temp\c
但我不想从这些路径移动文件
C:\temp\a\aa
C:\temp\z\hh
C:\temp\c\kku
我不太明白如何设置目录的级别。我尝试用这个
$rootPath = "C:\temp"
Get-ChildItem -Path $rootPath -Recurse -File | ForEach-Object {
$filePath = $_.FullName
$fileName = $_.Name
$folderPath = $_.DirectoryName
if ($folderPath -notmatch "^$rootPath\\[a-z]\\.*\\hh$" -and $folderPath -notmatch "^$rootPath\\[a-z]\\.*$" -and $folderPath -ne $rootPath) {
Move-Item -Path $filePath -Destination "$rootPath\$fileName"
}
}
我想我搞砸了正则表达式,但我想知道这是不是问题所在
1条答案
按热度按时间yc0p9oo01#
首先,你把这项工作搞得过于复杂了。
其次,代码中没有设置深度,这是使用
Get-ChildItem
cmdlet的开关。如果您只需要特定的目录,那么只需定位这些目录,而不要使用
-Recurse
开关,您也不必担心子目录。采用
-Depth
方法,您根本不需要RegEx。要避免这种调试难题,请始终一步一步地编写和处理代码。在转到下一行之前,请确保您在每一行都得到了预期的结果。它几乎消除了调试难题和不必要的代码工作。例如: