批量移动其中包含特定文件的文件夹
Batch to move folders that have a specific file in it
我正在尝试获取包含特定文件 *.t
的文件夹列表(一个文件夹中不超过一个这样的文件):
setlocal enabledelayedexpansion
for /f "delims=" %%a in ('Dir /B /A:-D /S "D:\Old\Stuff\*.t"') do
(@echo %%~dpa>>Folders.txt)
endlocal
这行得通,并为我提供了一个包含完整路径和末尾 \
的文件...
例如
D:\Old\Stuff\Folder1\
D:\Old\Stuff\Folder2\
D:\Old\Stuff\Folder3\
然后我想将包含其内容的所述文件夹移动到另一个位置,但它不起作用:
for /f "delims=" %%i in (Folders.txt) do Move %%i "D:\New\Stuff\"
我做错了什么?
尝试
for /f "delims=" %%i in (Folders.txt) do Move "%%i*" "D:\New\Stuff\"
move
的第一个参数应该用引号括起来,因为目录名似乎包含空格; *
指定 "all files in the directory".
您还没有说是否要移动任何子目录。您应该注意,移动是为文件而不是目录设计的。
因为没有重复的可能,所以解决方法很简单;你甚至不需要临时文件 Folders.txt
:
for /F "delims=" %%F in ('dir /S /A:-D /B "D:\Old\Stuff\*.t"') do (
move "%%~dpF." "D:\New\Stuff\"
)
%%~dpF
returns 每个找到的 *.t
文件的父目录,尾部有反斜杠。只需附加一个 .
,表示当前目录,因此尾随 \
不会再导致 move
命令出现问题。
不要尝试删除结尾的反斜杠,因为在某些特殊情况下这可能会导致问题:假设目标目录是 D:\
,因此删除 \
会留下 D:
与 D:\
不同(但 D:\.
是)。
即使在某个目录中可能有多个 *.t
文件,代码也能正常工作,尽管 move
命令对每个重复项都会抛出一个错误,因为该目录已经之前被移动过。只需将 2> nul
附加或添加到 move
命令行即可隐藏那些(和其他)错误。
我正在尝试获取包含特定文件
*.t
的文件夹列表(一个文件夹中不超过一个这样的文件):setlocal enabledelayedexpansion for /f "delims=" %%a in ('Dir /B /A:-D /S "D:\Old\Stuff\*.t"') do (@echo %%~dpa>>Folders.txt) endlocal
这行得通,并为我提供了一个包含完整路径和末尾
\
的文件...例如
D:\Old\Stuff\Folder1\
D:\Old\Stuff\Folder2\
D:\Old\Stuff\Folder3\然后我想将包含其内容的所述文件夹移动到另一个位置,但它不起作用:
for /f "delims=" %%i in (Folders.txt) do Move %%i "D:\New\Stuff\"
我做错了什么?
尝试
for /f "delims=" %%i in (Folders.txt) do Move "%%i*" "D:\New\Stuff\"
move
的第一个参数应该用引号括起来,因为目录名似乎包含空格; *
指定 "all files in the directory".
您还没有说是否要移动任何子目录。您应该注意,移动是为文件而不是目录设计的。
因为没有重复的可能,所以解决方法很简单;你甚至不需要临时文件 Folders.txt
:
for /F "delims=" %%F in ('dir /S /A:-D /B "D:\Old\Stuff\*.t"') do (
move "%%~dpF." "D:\New\Stuff\"
)
%%~dpF
returns 每个找到的 *.t
文件的父目录,尾部有反斜杠。只需附加一个 .
,表示当前目录,因此尾随 \
不会再导致 move
命令出现问题。
不要尝试删除结尾的反斜杠,因为在某些特殊情况下这可能会导致问题:假设目标目录是 D:\
,因此删除 \
会留下 D:
与 D:\
不同(但 D:\.
是)。
即使在某个目录中可能有多个 *.t
文件,代码也能正常工作,尽管 move
命令对每个重复项都会抛出一个错误,因为该目录已经之前被移动过。只需将 2> nul
附加或添加到 move
命令行即可隐藏那些(和其他)错误。