Batch file 基于文件名中的字符串创建文件夹

Batch file 基于文件名中的字符串创建文件夹,batch-file,Batch File,我需要一个批处理文件来为目录中的文件列表创建一个进程 例如,文件名结构为:00000\u AAA\u 132144\u 2012021.txt 我需要批次以: 1-根据第二个下划线后的数字创建文件夹名称,因为这是命名中唯一的常量 2-将文件移动到新文件夹中 在上述示例中,批处理将创建一个名为132144的文件夹,然后将文件00000\u AAA\u 132144\u 2012021.txt移动到该文件夹中 对于类似的需求,我使用了为我创建的脚本endro(如下)。是否可以修改此项以满足我的要求

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

例如,文件名结构为:
00000\u AAA\u 132144\u 2012021.txt

我需要批次以:

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

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

在上述示例中,批处理将创建一个名为
132144
的文件夹,然后将文件
00000\u AAA\u 132144\u 2012021.txt
移动到该文件夹中

对于类似的需求,我使用了为我创建的脚本endro(如下)。是否可以修改此项以满足我的要求

@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
)

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

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
文档不遵循相同的命名标准,这将导致问题

@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
endro的例程选择
.pdf
文件,您已经指定了
.txt

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

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

追加
2>nul
以抑制错误消息(例如,当目录已存在时)


追加
>nul
以抑制报告消息(例如,
1个文件移动了

感谢间隔确实不同,所以我尝试在('echo%filename%')中使用for/f“delims=u-tokens=3”%%a设置dirname=%%a@echo off setlocal enabledelayedexpansion for/f“delims=_-tokens=3”%%a('echo%filename%'))do set dirname=%%a set“filename=%%~i”set“folder=!filename!”mkdir“!folder!”2>nul move“!filename!”!folder!”)但它似乎没有正确定义新文件夹名称a files我已编辑了答案。对我有用。让我知道它是否适合你。