按批处理文件中的文件类型将文件移动到不同的目录(Win)

时间:2016-04-21 23:00:02

标签: sorting batch-file cmd move xcopy

基本上我要做的是用批处理文件对我的下载文件夹进行排序。我需要知道如何使批处理文件覆盖重复文件或在文件名末尾创建“(1)”。 我正在使用.jpeg,jpg等移动任何文件到我的图片文件夹等。 我现在有这个,

@ECHO OFF
mkdir %USERPROFILE%\Downloads\EXEs
mkdir %USERPROFILE%\Downloads\Jars
mkdir %USERPROFILE%\Downloads\zips
mkdir %USERPROFILE%\Downloads\Crafts
mkdir %USERPROFILE%\Documents
mkdir %USERPROFILE%\Downloads\ISO's
mkdir %USERPROFILE%\Pictures
mkdir %USERPROFILE%\Downloads\Torrent
mkdir %USERPROFILE%\Music
mkdir %USERPROFILE%\Videos
mkdir %USERPROFILE%\Contacts


move %CD%\*.exe %USERPROFILE%\Downloads\EXEs 
move %CD%\*.jar %USERPROFILE%\Downloads\Jars
move %CD%\*.zip %USERPROFILE%\Downloads\zips
move %CD%\*.rar %USERPROFILE%\Downloads\zips
move %CD%\*.gz %USERPROFILE%\Downloads\zips
move %CD%\*.7z %USERPROFILE%\Downloads\zips
move %CD%\*.tar.gz %USERPROFILE%\Downloads\zips
move %CD%\*.craft %USERPROFILE%\Downloads\Crafts
move %CD%\*.pdf %USERPROFILE%\Documents
move %CD%\*.doc %USERPROFILE%\Documents
move %CD%\*.docx %USERPROFILE%\Documents
move %CD%\*.csv %USERPROFILE%\Documents
move %CD%\*.txt %USERPROFILE%\Documents
move %CD%\*.iso %USERPROFILE%\Downloads\ISO's
move %CD%\*.img %USERPROFILE%\Downloads\ISO's
move %CD%\*.jpg %USERPROFILE%\Pictures
move %CD%\*.jpeg %USERPROFILE%\Pictures
move %CD%\*.png %USERPROFILE%\Pictures
move %CD%\*.bmp %USERPROFILE%\Pictures
move %CD%\*.Torrent %USERPROFILE%\Downloads\Torrent
move %CD%\*.m3u %USERPROFILE%\Music
move %CD%\*.mp4 %USERPROFILE%\Videos
move %CD%\*.vcf %USERPROFILE%\Contacts
echo Sort Completed.
pause

虽然这在大多数情况下完成了这项工作。我仍然留下了一些文件和大约12条错误消息,

  

存在重复的文件名,或找不到该文件。

     

存在重复的文件名,或找不到该文件。

     

存在重复的文件名,或找不到该文件。

我相当肯定这些消息中的大多数都是没有找到“* .exe”之类的程序。然而,有些文件是从剩下的一些文件中删除的。 我尝试了很多谷歌搜索,发现了比我需要的更复杂的事情。 很抱歉,如果有这样的帖子,我找不到它。 谢谢你的时间。

2 个答案:

答案 0 :(得分:2)

如果move *.ext ...无法找到扩展名为.ext的文件,则可能发生错误(可能)。你可以

if exist *.ext move *.ext ...

或者只是将errormessage重定向到nirvana:

2>nul move *.ext ...

如果您确实要覆盖目标中的任何现有文件:move有一个/y参数,那就是这样做的。 (虽然move /?建议,move在从批处理文件运行时默认执行此操作)

对于剩下的文件,我建议在批处理文件末尾添加另一行(当所有其他文件都被移动时):

2>nul move *.* %USERPROFILE%\Other

答案 1 :(得分:1)

  1. 要覆盖重复文件,请将/y选项添加到move命令:

    move / y%CD%*。csv%USERPROFILE%\ Documents

  2. 要将(1)追加到文件名的末尾,您可以先检查存在,例如在forfiles循环中:

    forfiles / p%CD%/ m * .csv / c" cmd / c如果存在%USERPROFILE%\ Documents \ @file(移动@path%USERPROFILE%\ Documents \ @ fname ^(1 ^) 。@ ext)else(移动@path%USERPROFILE%\ Documents)"

  3. 这会将file.ext重命名为file(1).ext。但是如果已经有文件(1).ext,你将得到同样的问题。所以它需要进一步改进,也许一些额外的循环将尝试(1),(2),(3)......