Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/13.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 - Fatal编程技术网

Powershell将子文件夹中的所有文件和子文件夹移动到当前目录

Powershell将子文件夹中的所有文件和子文件夹移动到当前目录,powershell,Powershell,我尝试了这个,没有错误,但没有修改任何文件: Get-ChildItem -Path "subfolder\" -Recurse | Move-Item -Destination "." 更新:我不想要绝对路径,但想要相对路径。这看起来像是一个疯狂的尝试,老实说,这个问题并不像我想的那么全面。例如:我不确定该文件夹是否仅为1级深度,或者是否可能距离当前目录更远。不管怎么说,我得到了一些基本上可以正常工作的东西,不必费心处理递归: $SubFolder

我尝试了这个,没有错误,但没有修改任何文件:

Get-ChildItem -Path "subfolder\" -Recurse |  Move-Item -Destination "."

更新:我不想要绝对路径,但想要相对路径。这看起来像是一个疯狂的尝试,老实说,这个问题并不像我想的那么全面。例如:我不确定该文件夹是否仅为1级深度,或者是否可能距离当前目录更远。不管怎么说,我得到了一些基本上可以正常工作的东西,不必费心处理递归:

$SubFolder = 'YourFolderName'
$SubFolder = Get-Item .\$SubFolder

Get-ChildItem $SubFolder |
ForEach-Object{
    $Destination = $_.FullName -Replace "$($SubFolder.FullName.Replace('\','\\'))", ".\"
    $NewParent   = $Destination -Replace $_.Name 

    Move-Item $_.FullName -Destination $NewParent    
}
我认为这里的诀窍是你必须转移到父母的父母那里,等等,或者不管有多少级别的备份/备份。因此,请使用当前目录语法
\
找出新的父目录应该是什么。一旦你有了它,你就可以把所有的东西从第一层移到不用递归的地方
Move Item
在它知道要移动整个内容的文件夹上,在子文件夹中找到的文件显然会移动到新的正确父文件夹中


我有另一个使用递归的工作版本,但这似乎更简洁,令我惊讶的是这似乎有效。然而,我对此并不感到兴奋。

这似乎是一个疯狂的尝试,老实说,这个问题并不像我想的那么全面。例如:我不确定该文件夹是否仅为1级深度,或者是否可能距离当前目录更远。不管怎么说,我得到了一些基本上可以正常工作的东西,不必费心处理递归:

$SubFolder = 'YourFolderName'
$SubFolder = Get-Item .\$SubFolder

Get-ChildItem $SubFolder |
ForEach-Object{
    $Destination = $_.FullName -Replace "$($SubFolder.FullName.Replace('\','\\'))", ".\"
    $NewParent   = $Destination -Replace $_.Name 

    Move-Item $_.FullName -Destination $NewParent    
}
我认为这里的诀窍是你必须转移到父母的父母那里,等等,或者不管有多少级别的备份/备份。因此,请使用当前目录语法
\
找出新的父目录应该是什么。一旦你有了它,你就可以把所有的东西从第一层移到不用递归的地方
Move Item
在它知道要移动整个内容的文件夹上,在子文件夹中找到的文件显然会移动到新的正确父文件夹中


我有另一个使用递归的工作版本,但这似乎更简洁,令我惊讶的是这似乎有效。然而,我对此并不感到兴奋。

您的答案将是:

Move-Item -Path 'subfolder\*' -Destination . -Force

这是相对的,并将处理文件夹中的所有隐藏文件。

您的答案如下:

Move-Item -Path 'subfolder\*' -Destination . -Force

这是相对的,并将处理文件夹中的所有隐藏文件。

您可以尝试类似于
gci.\subfolder\'-Recurse-File |%{Move Item-Path($.FullName)}
,但是如果您有同名的文件怎么办?您需要在其中提供一些错误处理吗?如果您有两个名为“file.txt”的文件,您将使用-Force标志覆盖它们。将gci对象保存到一个数组中,然后检查具有相同名称的条目,可以解决这个问题?我喜欢PowerShell,但这听起来像是RoboCopy的工作。没有?@Steven没有,我只有几个文件,但有很多次,我想把它放在配置文件中,并被其他一些powershell函数调用。还可能希望移植到powershell Linux。@ITM感谢它除了隐藏之外还能工作。git文件现在将搜索如何处理隐藏文件;)@AdminOfThings-Recurse不保留层次结构?我想我需要它来复制所有文件夹和子文件夹。你可以尝试类似于
gci.\subfolder\'-Recurse-File |%{Move Item-Path($.FullName)}
,但是如果你有同名的东西呢?您需要在其中提供一些错误处理吗?如果您有两个名为“file.txt”的文件,您将使用-Force标志覆盖它们。将gci对象保存到一个数组中,然后检查具有相同名称的条目,可以解决这个问题?我喜欢PowerShell,但这听起来像是RoboCopy的工作。没有?@Steven没有,我只有几个文件,但有很多次,我想把它放在配置文件中,并被其他一些powershell函数调用。还可能希望移植到powershell Linux。@ITM感谢它除了隐藏之外还能工作。git文件现在将搜索如何处理隐藏文件;)@AdminOfThings-Recurse不保留层次结构?我想我需要它来复制所有文件夹和子文件夹。我不需要绝对路径,而是相对路径;)我不想要绝对路径,而是相对路径;)