Search code examples
dos

dos script to find some files , create a folder in the same directory and move them in


i want to create a dos script (.bat) to search on all sub folders and whenever it finds a file with the word MK11 in the file name it must create a folder named archive and move the file in it.

example:

c:\folder1\folder2\folderX\fileMK11.txt -> c:\folder1\folder2\folderX\archive\fileMK11.txt c:\folder1\folder3\fMK11ile.txt -> c:\folder1\folder3\archive\fMK11ile.txt

I tried to make the following script from examples i have seen but the problem is that it creates the folder "archive" in the directory where the script is instead of the directory where the file is found.

    setlocal ENABLEDELAYEDEXPANSION
    set /a c=0
    FOR /R %%i in (*MK11*) do (
    set /a c=c+1
    md archive
    move "%%i" archive
    )
    endlocal

Solution

  • I think this script will get you down the road. I echoed a COPY command rather than a MOVE command, but some of the hard part is done.

    @echo off
    SETLOCAL ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION
    
    SET TEMPFILE=%TEMP%\afinder_%RANDOM%_%RANDOM.tmp
    DIR /S /B /A-D *MK11* >%TEMPFILE%
    FOR /F "usebackq delims=" %%f IN (`type %TEMPFILE%`) DO (
        ECHO "%%f"
        FOR /F "delims=\ tokens=*" %%a IN ("%%f") DO (
            SET PNAME="%%~pa"
            ECHO PNAME is set to !PNAME!
        ECHO "!PNAME:~-9,7!"
            REM Check to see if this file is already in an Archive directory.
            IF "!PNAME:~-9,7!" == "Archive" (
                echo got one
            ) else (
                echo not one
                IF NOT EXIST "!PNAME!\Archive" (MKDIR "!PNAME!\Archive")
                echo COPY %%f "!PNAME!\Archive"
            )
        )
    )
    IF EXIST "%TEMPFILE%" (DEL "%TEMPFILE%")
    EXIT /B 0