2015-10-15 28 views
1

我使用此代码从子目录的子文件夹中移动文件,然后删除子文件夹和目录本身。然后在下一次创建一个同名的空目录, 问题是如果任何dir,子文件夹或任何文件包含空格的名称,他们的代码不起作用,否则它对我来说很好。帮助运行Windows 7如何从名称空间的批处理文件中的子文件夹复制文件.mov

for /R "G:\test\NEW" %%f in (*.mov) do move %%f "G:\test" 
pause 
@echo off 
set /p a=Delete Empty folders(Y/N) 
IF /I "%a%"=="y" goto first 
IF /I "%a%"!="y" goto second 
:first 
rmdir G:\test\NEW /s /q 
md "G:\test\NEW" 
:second 
Exit 
+2

先给路径引号 “” RMDIR –

回答

0

如果文件名可以有一个空格,那么你需要引用它。

for /R "G:\test\NEW" %%f in (*.mov) do move "%%f" "G:\test" 
0

通过加双引号应该可以解决。

for /R "G:\test\NEW" %%f in (*.mov) do move "%%~f" "G:\test" 
pause 

@echo off 
set /p "a=Delete Empty folders (Y/N) " 
IF /I "%a%"=="y" goto first 
IF /I "%a%" neq "y" goto second 

:first 
rmdir /s /q "G:\test\NEW" 
md "G:\test\NEW" 

:second 
Exit 
0

有在你的代码的几个问题:

  • 有双引号周围是否缺少最路径规范;
  • 比较运算符!=(在您的第二个if中)无效;我简化了一下逻辑;
  • for /R循环内,您正在修改要迭代的目录树内容,这不是一个好主意,因为这可能会导致意外结果 - 请参阅this post有关该主题的内容;因此最好使用dir /B /S来列出目录树的内容,并让for /F解析返回的列表;

下面的代码片段应该按预期工作:

for /F "eol=| delims=" %%F in ('dir /B /S "G:\test\NEW\*.mov"') do move "%%~fF" "G:\test\" 
pause 
@echo off 
set /P A=Delete empty folders (Y/N)? 
if /I not "%A%"=="y" exit /B 
rmdir /S /Q "G:\test\NEW" 
mkdir "G:\test\NEW" 
相关问题