2013-12-18 260 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