创建Windows批处理文件以创建文件夹/文件

时间:2013-08-20 10:57:49

标签: batch-file

我想从某个文件的前缀创建文件夹,然后将文件名中包含特定字符串的多个文件复制到该文件夹​​。例如:

VI文件到名为 DM0008 的文件夹,包含以下文件

DM0008d3VI_001.IMI
DM0008d3VI_002.IMI

将MI文件发送到名为 DM0008MI 的文件夹,其中包含以下文件

DM0008d6MI_002.IMI
DM0008d6MI_003.IMI

我确实尝试了这个但是这为每个单独的文件创建了一个文件夹:

@echo off
for %%a in (*VI*) do (
  md "%%~na" 2>nul
  move "%%~na.*" "%%~na"
)
for %%a in (*MI*) do (
  md "%%~na" 2>nul
  move "%%~na.*" "%%~na"
)

3 个答案:

答案 0 :(得分:1)

假设文件名的第一部分(DM####)总是6个字符,你可以这样做:

@echo off

setlocal EnableDelayedExpansion

for %%a in (*VI*) do (
  set "folder=%%~na"
  set "folder=!folder:~0,6!"
  if not exist "!folder!" md "!folder!"
  move "%%~nxa" "!folder!"
)
for %%a in (*MI*) do (
  set "folder=%%~na"
  set "folder=!folder:~0,6!MI"
  if not exist "!folder!" md "!folder!"
  move "%%~nxa" "!folder!"
)

答案 1 :(得分:0)

@ECHO OFF &SETLOCAL
FOR /f "delims=" %%a IN (file) DO (
    FOR /f "delims=" %%b IN ('echo("%%~na"^|sed -r "/VI/s/(..[0-9]+).*/\1/;/MI/s/(..[0-9]+).*/\1MI/"') DO (
        ECHO MD "%%~b" 2>NUL
        ECHO MOVE "%%~fa" "%%~b"
    )
)

sed for Windows

答案 2 :(得分:0)

如果您使用的唯一目录是DM0008DM0008MI且文件模式为DM0008d3VI_*.IMIDM0008d6MI_*.IMI,那么:

@ECHO OFF
IF EXIST DM0008d3VI_*.IMI (
    MD DM0008
    MOVE DM0008d3VI_*.IMI DM0008
)
IF EXIST DM0008d6MI_*.IMI (
    MD DM0008MI
    MOVE DM0008d6MI_*.IMI DM0008MI
)

如果这不是您的规格,请将您的问题更清楚。