从列表中指定文件,检查文件大小,如果GTR 1MB>检查扩展名,如果.doc复制

时间:2017-05-22 00:14:47

标签: batch-file filesize

我需要你的帮助。

我在一个位置的多个文件夹中保存了数千个文档(.doc)。我需要一个批处理脚本来帮助我完成以下任务:

Grab file name from list.txt 
Search for file within source directory and sub-directories 
When found, check file size 
If GTR 1MB do Copy to Destination without retaining folder structure 
If LT 1MB do nothing and move on to next file on list

对于脚本来说,我是初学者,一切看起来都让我感到困惑。到目前为止,我进行的所有研究都有以下内容,但它没有做任何事情,CMD只是在我运行时打开并立即关闭。

有人可以指出我正确的方向来实现我正在寻找的结果。在哪里可以了解有关批量脚本的更多信息,因为我可以看到将来会有更多用途。

提前感谢您的回复。

@Echo off

set filelist="C:\Users\Me\Desktop\User Data\list.txt"
set source="C:\Users\Me\Desktop\User Data"
set destination="H:\New Folder\User Data Backup"
set maxbytesize=1000000

for /f "tokens=*" %%i in "%filelist%" DO (
    xcopy /S /E /U "%source%\%%i" "%destination%"
)

pause

3 个答案:

答案 0 :(得分:1)

重写

set filelist="C:\Users\Me\Desktop\User Data\list.txt"

作为

set "filelist=C:\Users\Me\Desktop\User Data\list.txt"

第一个将文本包括引号 AND 任何尾随空格分配给变量。第二个仅指定=和结束报价之间的那一部分。

(显然,需要针对每个字符串 - 分配实例进行更正。)

使用您的代码,您的for命令变为

for /f "tokens=*" %%i in ""C:\Users\Me\Desktop\User Data\list.txt"" DO (

%var%被简单地机械地替换为该变量的值

两个计数不正确 - 引号加倍和括号丢失。 for命令是

for %%x in (set) do

因此,批处理检测并报告语法错误,但由于您显然使用点击和傻笑,窗口会自动关闭并产生错误消息。

有很多关于如何设置命令提示会话的SO项目。它更容易使用" DOS" (它不是真的DOS - 它是带有增强功能的DOS模拟器)"来自提示符"

同时,尝试(在修复报价后)

for /f "tokens=*" %%i in (%filelist%) DO (
    IF %%~zi geq %maxbytesize% xcopy /S /E /U "%source%\%%i" "%destination%"
)

但请注意,如果filelist包含空格,则您需要

for /f "usebackqtokens=*" %%i in ("%filelist%") DO (

您的代码只在当前目录中查找您的文件名列表。

答案 1 :(得分:0)

这是一次尝试,希望能够复制所有找到的文件,为目的地中已存在的文件名增加文件名。

@Echo Off

Set "srcDir=%UserProfile%\Desktop\User Data"
Set "dstDir=H:\New Folder\User Data Backup"
Set "lstTxt=%UserProfile%\Desktop\User Data\list.txt"
Set "minSiz=1048576"

For /F "UseBackQ Delims=" %%A In ("%lstTxt%"
) Do For /F "Tokens=1,3*" %%B In ('Where/T /F /R "%srcDir%" "%%~nxA" 2^>Nul'
) Do If %%B Gtr %minSiz% If Not Exist "%dstDir%\%%~nxA" (Copy %%D "%dstDir%">Nul
) Else Cmd/Q /S /C"For /L %%E In (1 1 9999) Do If Not Exist "%dstDir%\%%~nA[%%E]%%~xA" Copy %%D "%dstDir%\%%~nA[%%E]%%~xA">Nul&&Exit"

答案 2 :(得分:0)

除了Magoohis answer已经出现的引用和语法问题之外,我修复了有关路径深度的问题,因为您要复制匹配的文件而不使用其文件夹结构:

@echo off

set "filelist=%USERPROFILE%\Desktop\User Data\list.txt"
set "source=%USERPROFILE%\Desktop\User Data"
set "destination=H:\New Folder\User Data Backup"
set "maxbytesize=1000000"

for /F "usebackq tokens=*" %%i in ("%filelist%") do (
    for /F "delims=" %%j in ('dir /B /S /A:-D "%source%\%%i"') do (
        if %%~zj GTR %maxbytesize% copy "%%j" "%destination%\"
    )
)

pause

我将xcopy /U替换为copy,因为前一个命令只复制目标中已存在的文件,我认为这不是您想要的。