我正在使用Minecraft Overviewer来生成世界地图,但是,正在生成的目录(和子目录)比我需要的要多得多。层次结构表示quad-tree,缩放级别与其创建这些文件夹的向下级别数量相匹配。
对于您中的询问者,the documentation确实指出您可以在配置文件中设置maxzoom
,但是,这是用户界面的限制,而不是实际的限制。如前所述:
这不会更改渲染的缩放级别数量,但允许 您忽略上传更大,更详细的缩放级别,如果 带宽使用是个问题。
我需要的是一种删除超过一定深度(例如4级深度)的所有子目录的方法。我知道del
用于删除文件,rmdir
用于删除目录,并且*
被认为是通配符。因此,我认为我可能只需要写...
rmdir */*/*/*
可悲的是,它生成以下错误:Invalid switch - "*",
也许正斜杠存在问题?在这种情况下,我尝试过...
rmdir *\*\*\*
但是,这会产生以下错误:The filename, directory name, or volume label syntax is incorrect
请帮助?
答案 0 :(得分:2)
尝试此脚本。从当前文件夹开始,它将删除所有级别大于4的文件夹。例如如果您有文件夹1\2\3\4\5\6\7
,并且脚本位于文件夹1
中,则它将删除从6
及以下的文件夹。
@echo off
setlocal enabledelayedexpansion
call :deeptree 0 4
goto :eof
:deeptree
for /d %%p in (*.*) do (
if %1 lss %2 (
pushd "%%p"
set /a l=%1+1
echo Level !l! %%p
call :deeptree !l! %2
popd
) else (
echo removing %%p
rd /s /q "%%p"
)
)
答案 1 :(得分:2)
根据我的开场白,您可以使用RoboCopy
:
@Ren "sourceDir\" "tempName"
@RoboCopy "tempName" "sourceDir" /E /Move /Lev:4
您还可以使用PowerShell
来执行此操作,因为它允许您希望使用的通配符模式。
版本3.0 +,(Win8 +):
Get-ChildItem '.\*\*\*\*' -Directory -Recurse | Remove-Item -Recurse -Force -ErrorAction SilentlyContinue
…以及别名:
Ls '.\*\*\*\*' -Di -R|Rm -R -Fo -EA SilentlyContinue
版本2.0,(Win7 +):
Get-ChildItem '.\*\*\*\*' -Recurse | Where-Object {$_.PSIsContainer} | Remove-Item -Recurse -Force -ErrorAction SilentlyContinue
…以及别名:
Ls '.\*\*\*\*' -R|?{$_.PSIsContainer}|Rm -R -Fo -EA SilentlyContinue
答案 2 :(得分:1)
您可以简单地嵌套多个for /D
loops,如下所示:
for /D %%A in ("D:\Root\Path\Day\*") do (
for /D %%B in ("%%~A\*") do (
for /D %%C in ("%%~B\*") do (
for /D %%D in ("%%~C\*") do (
for /D %%E in ("%%~D\*") do (
rmdir /S /Q "%%~E"
)
)
)
)
)