我在文件夹中有一堆文件夹。像这样
Root Folder
-- Folder 1
-- Folder 2
-- Folder 3
-- Folder 4
Run Code Online (Sandbox Code Playgroud)
我想折叠所有文件夹,以便文件夹 1、文件夹 2、文件夹 3、...文件夹 n 下的所有文件都存在于根文件夹下。
在 Windows 中执行此操作的最快方法是什么?
trl*_*kly 23
没有理由使用特殊工具甚至脚本。只需使用资源管理器中的搜索功能即可。
*
并按 Enter。如果您希望有一个脚本,这样您就可以启动它并忘记它,也可以这样做。替换命令mv *\* .
非常简单 ( for /r %f in (*.*) do @move "%~f" .
),但我确定您希望处理重复项,而不像@Nicole Hamilton 的回答那样将它们留在后面。在重复文件名后附加一个数字可能是最简单的方法。
将以下批处理文件复制并粘贴到记事本中并保存为“flatten.cmd”(包括引号):
@echo off
cd "%~1"
md tempryfolder
move *.* tempryfolder
for /r %%f in ("*.*") do call :START "%%~f"
for /r /d %%f in (*.*) do rd "%%~f"
GOTO :EOF
:START
setlocal
If exist "%~n1%~x1" set /a num=2
:LOOP
If exist "%~n1%num%%~x1" (
set /a num+=1
goto loop
)
move "%~1" "%~n1%num%%~x1"
Run Code Online (Sandbox Code Playgroud)
要使用该脚本,只需将您想要展平的文件夹拖到它上面。
Mat*_*hew 17
您可以在 Windows 资源管理器中通过导航到要展平的文件夹并搜索System.Kind:<>folder
以从结果中排除文件夹来展平。
然后,您可以使用 CTRL+A 选择所有文件并将它们复制并粘贴到新文件夹中。请注意,Windows 资源管理器会询问您如何处理重复的文件名。
使用 Unix shell 可以轻松完成这种事情。以下是您可以使用我自己的Hamilton C shell(包括免费版本)执行的操作。您可以使用Cygwin bash 执行非常类似的操作。
mv *\* .
Run Code Online (Sandbox Code Playgroud)
如果您的目录确实很大,则可能会在命令行中使用通配符太长,导致 Windows 无法传递给子进程。(Windows CreateProcess调用将参数列表限制为 32K Unicode 字符。)但 C shell 内部没有限制,因此您可以通过以下方式迭代整个列表:
foreach i ( *\* )
mv $i .
end
Run Code Online (Sandbox Code Playgroud)
对于@MarkAllen 的上述观点,这种假设没有重复的名称。如果有,列表中较晚的副本将覆盖较旧的副本。如果这是一个问题,您可以迭代这些文件,mv
仅在不覆盖的情况下才对它们进行处理。该:t
运算符是尾运算符。运算-e
符是文件存在 test。
foreach i ( *\* )
if ( -e $i:t ) then
echo -2 $i not moved because it already exists
else
mv $i .
end
end
Run Code Online (Sandbox Code Playgroud)
这仍然留下空目录,在它们被清空后你可能不想要它们。如果重要的话,这可能是下一次迭代。
归档时间: |
|
查看次数: |
30009 次 |
最近记录: |