如何从名称中包含空格的批处理文件中的子文件夹复制.mov文件

时间:2015-10-15 18:18:17

标签: batch-file

我正在使用此代码从dir的子文件夹中移动文件,然后删除子文件夹和dir本身。然后在下次创建一个具有相同名称的空目录, 问题是,如果dir,子文件夹或任何文件中的任何一个在名称中包含空格,那么代码并不起作用,否则它对我来说很好。帮助运行Windows 7

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 

3 个答案:

答案 0 :(得分:0)

如果文件名中有空格,则需要引用它。

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

答案 1 :(得分: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 

答案 2 :(得分: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"