批处理文件根据其名称的一部分移动文件

时间:2013-04-25 06:09:35

标签: batch-file directory move

bat文件是否可以搜索文件夹并查看文件名,只移动具有该名称或该名称部分的文件?然后将它们移动到指定位置。 例如:

Parent Folder 
Arrow0273.text
Arrow0314.text
Spear083112.text
Spear0832.text 
Sheild087.txt
Sheild87.txt 

Move only the files with “Arrow” in their name into folder location “A”. 
ect... 

谢谢大家! 编辑: 发现这个但不确定它是否是我正在寻找的,说实话,不确定该代码是如何工作的。 Move files to directories based on some part of file name?

2 个答案:

答案 0 :(得分:3)

也许是这样的?我刚才在这里找到了这个,我一直都在使用它。它会根据文件名和类型将文件移动到文件夹中。如果该文件夹不存在,它将在批处理文件的当前位置创建该文件夹。如果该文件夹已存在,则只需将其移动到该文件夹​​即可。

@echo off &setlocal
for /f "delims=" %%i in ('dir /b /a-d *.text') do (
set "filename1=%%~i"
setlocal enabledelayedexpansion
set "folder1=!filename1:~0,1!"
mkdir "!folder1!" 2>nul
move "!filename1!" "!folder1!" >nul
endlocal
)

可以更改第2行中的“ .pdf”以指定文件类型。您可以使用“。*”来移动所有文件类型,但这也会移动.bat文件和文件夹。

“~0,1!”第5行确定查看哪些字符以确定文件夹名称。第一个数字决定了它开始查看的字符(0表示开头,1表示从头开始的1个字符,等等)。第二个数字决定了它看到的字符数。如果它被更改为2,它将查看文件中的前2个字符。

目前它设置为仅查看第一个字符并仅移动.text文件。对于示例中的文件,它会将名为“A”的文件夹的所有“Arrow”文件和所有“Spear”文件移动到名为“S”的文件夹中。 “Shield”文件将保留原样,因为它们的扩展名为.txt,而不是.text。如果您将“ .text”更改为“ .t *”,它会将.txt和.text文件移动到“A”和“S”文件夹中。

答案 1 :(得分:2)

copy支持通配符,所以你需要做的就是:

copy Arrow* A