0

我想创建一个dos脚本(.bat)来搜索所有子文件夹,每当它找到文件名中包含单词MK11的文件时,它必须创建一个名为archive的文件夹并将文件移动到其中。

例子:

c:\folder1\folder2\folderX\fileMK11.txt -> c:\folder1\folder2\folderX\archive\fileMK11.txt c:\folder1\folder3\fMK11ile.txt -> c:\folder1\folder3\archive\fMK11ile 。文本文件

我试图从我看到的示例中制作以下脚本,但问题是它在脚本所在的目录而不是找到文件的目录中创建了文件夹“存档”。

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

1 回答 1

0

我认为这个脚本会让你走上这条路。我回应了 COPY 命令而不是 MOVE 命令,但一些困难的部分已经完成。

@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
于 2013-02-07T00:10:02.447 回答