批处理脚本文本文件输入以组织文件夹

时间:2013-12-18 04:31:12

标签: xml batch-file

我是脚本新手。

我想创建一个查看特定源文件夹的批处理文件,并将文件的前8个字符与文本文件中的8个字符相匹配,然后将其移动到特定文件夹。

例如:

我在C:\ ABCDEFGHblahblah.pdf

中有一个文件

存储在名为BPD的批处理文件目录中的文本文件包含许多逗号分隔的8个字符,如ABCDEFGH,STUVWXYZ。

脚本必须搜索所有txt文件的内容(在批处理文件目录中)然后如果ABCDEFGH存在于BPD.txt文件中,则将ABCDEFGHblahblah.pdf移动到BPD文件夹,如果该文件夹不存在则创建它

我正在寻找一个文本文件作为外部源的原因是因为8个字符非常动态,超级用户可以根据需要添加/删除/编辑新字符。

我在想......

 @ECHO OFF
    SETLOCAL ENABLEDELAYEDEXPANSION
    SET sourcedir="C:\Test"
    SET batchtxt="C:\BPD.txt, KLM.txt"
    SET destdir="C:\Test"
    FOR /f "delims=" %%a IN (
      'dir /b /a-d "%sourcedir%\*" '
     ) DO (
      MOVE "%sourcedir%\%%a" "%destdir%\!name!\" >nul
    )

这不起作用,请帮忙

2 个答案:

答案 0 :(得分:0)

也许不是防弹的,但可以作为基础使用并根据需要进行调整。

真实文件/文件夹操作前面有ECHO命令。如果输出到控制台是正确的,请删除ECHO移动文件/创建文件夹。

@echo off

    rem Prepare environment
    setlocal enableextensions disabledelayedexpansion

    rem Configure source of files
    set "sourceDir=c:\test"
    set "targetDir=c:\test\output"

    rem Read all data in ???.txt files in batch file directory into environment variables
    for %%f in ("%~dp0\???.txt") do for /f "tokens=* usebackq" %%l in ("%%~ff") do for %%t in (%%l) do set "_$%%~t=%%~nf"

    rem For each file in source directory
    for %%f in ("%sourceDir%\*") do (

        rem take 8 characters from file name and retrieve target from environment variable
        set "target=%%~nf"
        setlocal enabledelayedexpansion
        for %%i in ("!target:~0,8!") do set "target=!_$%%~i!"

        rem if target found, move the file to target directory
        if defined target (
            if not exist "%targetDir%\!target!" ECHO md "%targetDir%\!target!" >nul 
            ECHO move "%%~ff" "%targetDir%\!target!"
        )
        endlocal
    )

    rem Clean
    endlocal

答案 1 :(得分:0)

@ECHO OFF
SETLOCAL
SET "sourcedir=c:\sourcedir"
SET "destdir=c:\destdir"
SET "textfiles=c:\bpd\*.txt"
:: For my testing
SET "textfiles=q20649661.txt"
FOR /f "usebackqtokens=1,2delims=, " %%a IN ("%textfiles%") do (
 IF EXIST "%sourcedir%\%%a*.pdf" (
  ECHO MD "%destdir%\%%b"
  ECHO MOVE "%sourcedir%\%%a*.pdf" "%destdir%\%%b\"
 )
)
GOTO :EOF

'你的规格非常清楚。

对于我的测试,我设置了q20649661.txt内容

ABCDEFGH, STUVWXYZ

并建立了一个名为c:\sourcedir\ABCDEFGH123.pdf

的文件

运行的结果是

MD "c:\destdir\STUVWXYZ"
MOVE "c:\sourcedir\ABCDEFGH*.pdf" "c:\destdir\STUVWXYZ\"

我认为这是你想要的。

请注意,将2>nul附加到MD命令会在目录已存在时禁止显示错误的错误消息。