我首先要指出我对批处理过程完全陌生。我花了几个小时试图通过自己(通过网络)解决这个问题但没有成功。所以现在,给专家。对大多数人来说,我需要做的事情应该非常简单。
我有67,000多个文件,其中包含以下命名约定(acctnum_"A"_date_counter.filetype)
- 4312A201410011.TXT
- 4321A201410012.DOC
- 120232A201512311.PDF
- 135392A201601011.TXT
醇>
我需要根据acctnum值创建文件夹,然后将具有该acctnum的所有文件放入新文件夹中。每个文件都以" A"分隔。将acctnum与日期和计数器分开。 acctnum变量可以是任意数字,长度可以在1到7之间。
答案 0 :(得分:0)
您可能希望使用循环浏览文件的for /f
命令。这样的事可能适合你:
for /f "tokens=1-3 delims=A." %%a in ('dir /b /a-d') do (
echo md %%a
echo copy %%aA%%b.%%c %%a
)
这假定每个文件名中唯一的“A”是帐号和日期计数器之间的分隔符。如果文件扩展名中有“A”,则必须对其进行修改以解决此问题。它还假设只有'。'文件名中的(句点)是传统文件扩展名的分隔符。
您可以使用命令echo
'd安全地执行此操作。一旦echo
'd命令看起来像他们想要他们做的那样,请删除echo
。
答案 1 :(得分:0)
Wes Larsons的解决方案得到改进,以确保安全:
A
A
位于文件扩展名(*):在AA
之后,两个或多个连续的A(acctnum
)仍然存在问题(这对您来说可能不是问题):for
会对待它们是一个单独的分隔符。
@echo off
for %%a in (*) do (
for /f "tokens=1,* delims=A" %%b in ("%%~na") do (
if not "%%c" == "" (
ECHO md "%%b" 2>nul
ECHO copy "%%bA%%c%%~xa" "%%b\"
)
)
)
(同样,当输出似乎没问题时,请删除ECHO
)