2013-12-18 76 views
0

我是新手脚本。批处理脚本文本文件输入组织文件夹

我想创建一个批处理文件,该文件通过特定的源文件夹进行查看,并将文件的前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 
   ) 

这不起作用,请帮忙

+0

告诉我们发生了什么,以及为什么你不认为它有效。请阅读[常见问题]和[问问]以了解有关SO的优秀问题的规则和要求。 –

+0

从包含文件名/目录对的文本文件中发布几行问题。 – foxidrive

回答

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命令将在目录已存在时抑制丑陋的错误消息。

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