2015-10-15 53 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" 
相關問題