脚本删除目录,但保留的文件

问题描述:

我的脚本后,能够做到以下脚本删除目录,但保留的文件

我有文件和文件夹内他们大约2000目录

我要删除的主文件夹,但保持该文件夹内的所有内容

所以一个文件夹

Folder A/Folder 2/Video 1 
      Image1 
      Image2 

所以
的一个实例,我希望它能够删除主要的第一个文件夹,在这种情况下,将'文件夹A'

Folder 2/Video 1 
Image1 
Image2 

希望你能明白我想做什么,如果不只是问! 干杯

额外的信息

从这个

C:/folder A/Stuff 
C:/folder B/Stuff 
C:/folder C/Stuff 

对此

C:/stuff 
C:/sfuff 
C:/sfuff 

我只是想这蝙蝠能够从该文件夹中删除的文件夹和移动的一切我运行.bat的地方,我也希望能够在其他驱动器上运行.bat D:/ E;/F; /许多位置

+2

你的标签看起来有点混乱的胜利,win8的,散装和bash ..... – Kent 2013-03-25 17:12:17

+0

在Unix平台上,你可以用'MV做* ../'(从文件夹A)。我不知道Windows的等价物。 – 2013-03-25 17:12:55

+0

不知道为什么win8在那里固定它。 – xencored 2013-03-25 17:14:37

如果您在您的磁盘有这样的结构:

C:\Folder A 
| | Folder 2 
| | | Video 1 
| | | | Image1 
| | | | Image2 

..并执行这些命令:

cd "\Folder A" 
move "Folder 2" .. 

...那么你会得到这样的结果:

C:\Folder A 
| Folder 2 
| | Video 1 
| | | Image1 
| | | Image2 

也就是说,它将“文件夹2”向上移动一级,到“文件夹A”的同一级别。如果你想要做同样的事情里面“文件夹A”的所有文件夹,然后将其删除,此批处理文件这样做:

@echo off 
cd "\Folder A" 
for /F "delims=" %%a in ('dir /B /AD') do (
    move "%%a" .. 
) 
cd .. 
rd "\Folder A" 

这是你想要的吗?

编辑:新版本中添加的答案新的评论

@echo off 
rem Eliminate all folders present at the same level of the Batch file 
rem and move their contents one level up 
for /F "delims=" %%a in ('dir /B /AD') do (
    cd "%%a" 
    for /F "delims=" %%b in ('dir /B /AD') do (
     move "%%b" .. 
    ) 
    move *.* .. 
    cd .. 
    rd "%%a" 
) 

你必须注意,如果两个或多个文件夹或文件的东西有相同的名字,他们最初直接置于下方正在被删除的*文件夹,程序将发出错误,并且文件夹或文件不会被移动(并且*文件夹不会被删除)。

安东尼

+0

是这样的,但有很多很多的文件夹,我希望这样做(约1000)例如http://pastebin.com/9iz1NreL我只是想能够删除第一个文件夹(无论我在哪里运行.bat它会工作(如果这可以做到))干杯 – xencored 2013-03-26 11:40:13

+0

@xencored:对不起,我想我不明白你想要什么。您是否想以与上面的“文件夹A”相同的方式处理_several_文件夹?这很容易做到,但在这种情况下,我需要更多的细节:您要处理的所有文件夹在树中处于同一级别?请编辑上面的问题,按照我在答案中写的方式插入3或4个示例文件夹,并以同样的方式向我们展示如何获得最终结果。 – Aacini 2013-03-26 20:25:59

+0

对不起Aacini对我来说很难解释,Ive增加了一些更多的信息,正如你所说的那样希望这更清楚谢谢 – xencored 2013-03-27 02:20:50

@ECHO OFF 
SETLOCAL enabledelayedexpansion 
SET "relroot=c:\destdir" 
SET "relrootd=c:\destdir" 
SET "eliminate=folder a" 
XCOPY /t /e "%relroot%\%eliminate%" "%relrootd%" 
FOR /f "delims=" %%i IN ('dir /s /b /a-d "%relroot%\%eliminate%"') DO (
    SET dest=%%i 
    SET dest=!dest:%relroot%\%eliminate%=%relrootd%! 
    ECHO MOVE "%%i" "!dest!" >nul 
) 

这应该做到这一点 - 但它可能不会与具有特殊意义的CMD.EXE^&!%一些poison文件/目录名字符处理 - 定期alphamerics,符号和空格应该罚款

relroot是来源,relrootd是目的地。如果你喜欢,它们可以相同或不同。我使用了c:\destdir,因为这是我用于测试批处理文件的目录。

XCOPY创建适当的空树。

/b基本模式/s包括子目录/a-d不含数据夹被处理线由行,原始relroot和目录-TO-eliminate由目的地relroot更换并且拟议MOVE操作显示DIR输出。

验证后,请删除ECHO关键字以激活移动。

我会检查你的原始目录relroot\eliminate的空虚,再取出 - 只是为了安全起见...

+0

嗨,谢谢!当你说这是source/c:destdir时,我是否必须每次都改变它?文件夹遍布全国,是我问的原因!再次感谢这个 – xencored 2013-03-25 18:49:30

+0

需要更多信息。此过程应将所有“文件夹A”的内容移至 - 无论您喜欢何处。 'relroot'只是设置为'Folder A'的父项。 'relrootd'是目的地 - 可以在同一逻辑驱动器上的任何位置(如果它位于不同的驱动器上,则需要'XCOPY'而不是'MOVE')现在如果有许多'Folder A's,那是另一个题。如果你的目标是Folder A的父项,那么实现起来相对容易,那么在后续运行中,任何例程如何区分'已经移动'的结构和'now move me'结构? – Magoo 2013-03-25 19:12:09

+0

感谢彼得,我想我只是习惯于使用我拥有的其他蝙蝠,我会将.bat粘贴到我想要制作文件夹的地方并将其打开,无论如何,我在很多随机的地方都有相当多的文件夹在我使用这个.bat之后的许多硬盘上。我希望能够做到这一点(如果可以做到的话)。再次感谢彼得。 – xencored 2013-03-25 19:18:41