根据文件名中的字符串创建文件夹

时间:2014-01-08 02:20:26

标签: batch-file

我需要一个批处理文件来为目录中的文件列表创建进程。

文件名结构例如是:00000_AAA_132144_2012021.txt

我需要批次:

1 - 根据第二个下划线后面的数字创建一个文件夹名称,因为这是命名中唯一的常量。

2 - 将文件移动到新文件夹中。

在上面的示例中,批处理将创建一个名为132144的文件夹,然后将文件00000_AAA_132144_2012021.txt移动到文件夹中

对于类似的要求,我使用了Endoro为我创建的脚本(下面)。是否可以修改它以满足我的要求?

@echo off &setlocal
for /f "delims=" %%i in ('dir /b /a-d *.PDF') do (
    set "filename1=%%~i"
    setlocal enabledelayedexpansion
    set "folder1=!filename1:~11,6!"
    mkdir "!folder1!" 2>nul
    move "!filename1!" "!folder1!"
    endlocal
)

2 个答案:

答案 0 :(得分:0)

如果您知道文件名长度相同,您可以执行以下操作以获取第二个下划线后的数字 -

set filename=00000_AAA_132144_2012021.txt
set dirname=%filename:~10,6%

如果间距可能不同 - 您可以执行以下操作 -

for /f "delims=_ tokens=3" %%a in ('echo %filename%') do set dirname=%%a

是的,为你写的剧本似乎与你所要求的基本相同 - 我编辑它来做你所问的 -

@echo off

setlocal enabledelayedexpansion

for /f %%i in ('dir /b /a-d *.txt') do (
    set "filename=%%~i"
    for /f "delims=_ tokens=3" %%a in ('echo !filename!') do set folder=%%a 
    mkdir "!folder!" 2>nul
    move "!filename!" "!folder!"
)

这会将所有*.txt文档移动到基于文本文件名的第三部分创建的文件夹中。请注意,如果目录中的.txt文档不遵循相同的命名标准,则会导致问题。

答案 1 :(得分:0)

@ECHO OFF
SETLOCAL
SET "sourcedir=c:\sourcedir"
SET "destdir=c:\destdir"
FOR /f "delims=" %%a IN ('dir /b /a-d "%sourcedir%\*_*_*_*.txt" ') DO (
 FOR /f "tokens=3delims=_" %%m IN ("%%a") DO (
  ECHO MD "%destdir%\%%m"
  ECHO MOVE "%sourcedir%\%%a" "%destdir%\%%m\"
 )
)

GOTO :EOF

Endoro的例程选择.pdf个文件,您已指定.txt

找到与掩码匹配的文件名,找到名称中第三个_ - 分隔的标记,创建该目录,然后移动文件。

所需命令仅用于ECHO以用于测试目的。在确认命令正确无误后,将ECHO MD更改为MD以实际创建目录,并将ECHO MOVE更改为MOVE以实际移动文件。

附加2>nul以禁止显示错误消息(例如,当目录已存在时)

附加>nul以取消报告消息(例如1 file moved