我需要一个批处理文件来为目录中的文件列表创建进程。
文件名结构例如是: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
)
答案 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
)