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我已编辑了答案。对我有用。让我知道它是否适合你。