批量移动其中包含特定文件的文件夹

时间:2018-05-06 10:16:16

标签: batch-file directory move

  1. 我正在尝试获取其中包含特定文件*.t的文件夹列表(文件夹中只有一个这样的文件):

    setlocal enabledelayedexpansion
    
    for /f "delims=" %%a in ('Dir /B /A:-D /S "D:\Old\Stuff\*.t"') do 
    (@echo %%~dpa>>Folders.txt)
    
    endlocal
    

    这有效,并为我提供了一个文件,其中包含完整路径和最后一个\ ...

    e.g。
    D:\ Old \ Stuff \ Folder 1 \
    D:\ Old \ Stuff \ Folder 2 \
    D:\ Old \ Stuff \ Folder 3 \

  2. 然后,我想将带有内容的文件夹移到另一个位置,但它无效:

    for /f "delims=" %%i in (Folders.txt) do Move %%i "D:\New\Stuff\"
    
  3. 我做错了什么?

2 个答案:

答案 0 :(得分:0)

for /f "delims=" %%i in (Folders.txt) do Move "%%i*" "D:\New\Stuff\"

move的第一个参数应该用引号括起来,因为目录名似乎包含空格; *指定"目录中的所有文件"。

您还没有说过是否要移动任何子目录。您应该注意,move是为文件而不是目录而设计的。

答案 1 :(得分:0)

由于没有可能的重复,解决方案非常简单;你甚至不需要临时文件Traceback (most recent call last): File "main.py", line 3, in <module> list.sort = error TypeError: can't set attributes of built-in/extension type 'list'

Folders.txt

for /F "delims=" %%F in ('dir /S /A:-D /B "D:\Old\Stuff\*.t"') do ( move "%%~dpF." "D:\New\Stuff\" ) 返回每个找到的%%~dpF文件的父目录,并带有反斜杠。只需追加*.t,即当前目录,因此尾随.不会再导致\命令出现问题。

不要尝试删除尾部反斜杠,因为这可能会在某些特殊情况下导致问题:假设目标目录为move,因此删除D:\离开的\D:相同(但D:\是)。

即使在某个目录中可能有多个D:\.文件,代码仍然有效,尽管*.t命令会为每个副本引发错误,因为该目录已被移动之前。只需在move命令行中附加或前置2> nul即可隐藏这些(和其他)错误。