我正在使用此代码从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
答案 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"