批处理文件从文件名中删除数值,创建具有所述值的文件夹,然后将文件移动到该文件夹

时间:2016-03-01 16:30:44

标签: batch-file batch-processing

我首先要指出我对批处理过程完全陌生。我花了几个小时试图通过自己(通过网络)解决这个问题但没有成功。所以现在,给专家。对大多数人来说,我需要做的事情应该非常简单。

我有67,000多个文件,其中包含以下命名约定(acctnum_"A"_date_counter.filetype)

  
      
  1. 4312A201410011.TXT
  2.   
  3. 4321A201410012.DOC
  4.   
  5. 120232A201512311.PDF
  6.   
  7. 135392A201601011.TXT
  8.   

我需要根据acctnum值创建文件夹,然后将具有该acctnum的所有文件放入新文件夹中。每个文件都以" A"分隔。将acctnum与日期和计数器分开。 acctnum变量可以是任意数字,长度可以在1到7之间。

2 个答案:

答案 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