需要批处理文件来移动文件

时间:2014-01-31 18:22:18

标签: windows batch-file

我正在寻找一个可以用来将文件从一个文件夹移动到另一个文件夹的小型免费程序。我做了一些研究,认为批处理文件可能是我最好的选择。不幸的是,我以前从未使用批处理文件,并且拥有绝对的基本编程技能(在大学学习Java计算机科学课程)。

这就是我要找的:

我在一个特定文件夹(..... \ Phase_2_Document_Prep)中有多个文件夹,其中包含大量的PDF文件,超过25,000个。

我还有一个主Excel电子表格,其中包含每个PDF文档的文件名和它们应该位于的文件夹。截至目前,当前文件都与不同的文件夹混合在一起。我可以创建一个只有文件名和文件夹的管道分隔文本文件。

我需要一个程序来导入包含文件名和目标文件夹的txt文件,搜索当前的一个特定文件夹和子文件夹以查找文件名(PDF)并将每个文件移动到目标文件夹。

==============更新======================= 这是我正在使用的代码,但我一直在...... \ FILES在这个时候意外错误,没有任何东西在复制。

代码:

set FILELIST=C:\Users\mcuomo\Documents\Test\Mudd_3_List.txt
set FILESPATH=C:\Users\mcuomo\Documents\Test\FILES
set DESTPATH=C:\Users\mcuomo\Documents\Test\TARGET

for /f %%X in (%FILELIST%) do call :COPY_FILES "%%X"
goto :eof

:COPY_FILES
for /f %FILESPATH% %%I in (%~1) do echo xcopy /w /v "%%I" "%DESTPATH%%%~pnxI"
PAUSE

再次感谢

3 个答案:

答案 0 :(得分:1)

错误由for循环生成:COPY_FILES。

检查帮助以了解如何使用for命令 - for /?。根据帮助 -

,可以按以下方式使用/ F开关
FOR /F ["options"] %variable IN (file-set) DO command [command-parameters]
FOR /F ["options"] %variable IN ("string") DO command [command-parameters]
FOR /F ["options"] %variable IN ('command') DO command [command-parameters]

也许您想将第二个for循环更改为 -

for /f %%I in (%~1) do echo xcopy /w /v "%FILESPATH%\%%I" "%DESTPATH%\%%~pnxI"

由于您尚未包含它,我不确定路径和文件名之间是否需要反斜杠(%FILESPATH%和%% I)。如果您可以提供Mudd_3_List.txt

的内容示例,我可能会使其更有用

答案 1 :(得分:1)

您的问题似乎就是这一行:

for /f %FILESPATH% %%I in (%~1) do echo xcopy /w /v "%%I" "%DESTPATH%%%~pnxI"

语法应为:

for /f %%i in (%~1) do ...

for /f "<options>"  %%i in (%~1) do ...

有关文档,请参阅for /?。 顺便说一句:您应该使用("%~1")来处理带空格的文件名。

答案 2 :(得分:1)

这是非破坏性的,只会在与文件列表相同的文件夹中创建Mudd_3_List.txt.bat.txt,因此您可以在记事本中检查它,然后将其重命名为.bat,以便在您满意的情况下执行。

实际的文件列表Mudd_3_List.txt需要以每个行上以逗号分隔的格式从Excel中保存

folder_path,Filename

例如:确保没有文件夹名称中包含逗号。

c:\new folder1\folder B\,Old pdf nameA.pdf
c:\new folder2\folder five\,Old pdf nameB.pdf

更改下面的此文件夹以适合您"c:\folder\Phase_2_Document_Prep"

以下是创建文件的脚本:

@echo off
set "FILELIST=C:\Users\mcuomo\Documents\Test\Mudd_3_List.txt"
for /f "tokens=1,* delims=," %%a in ('type "%FILELIST%" ') do (
    for /r "c:\folder\Phase_2_Document_Prep" %%f in ("%%~b") do (
       >>%FILELIST%.bat.txt" echo md "%%~a" 2^>nul & move "%%~f" "%%~a"
    )
)