windows 基于部分文件名创建文件夹和重新定位文件

pieyvz9o  于 2023-02-16  发布在  Windows
关注(0)|答案(2)|浏览(124)

我有一系列的照片在一个文件夹中的名称格式类似于这样:

BA-ML-6256_Gocchup1.jpg
BA-ML-6256_Gocchup2.jpg
BA-ML-17302_Gocchup1.jpg
BA-ML-17302_Gocchup2.jpg

我想创建新的文件夹,如下所示,其中包含的文件:

BA-ML-6256
BA-ML-17302

我尝试使用这个脚本:

@echo off
for %%i in (*) do (
 if not "%%~ni" == "organize" (
  md "%%~ni" && move "%%~i" "%%~ni"
 )
)

但它创建了这4个文件夹:

BA-ML-6256_Gocchup1
BA-ML-6256_Gocchup2
BA-ML-17302_Gocchup1
BA-ML-17302_Gocchup2

请帮助我创建一个批处理脚本,将使这项工作。

gtlvzcf8

gtlvzcf81#

@ECHO OFF
SETLOCAL
rem The following setting for the directory is a name
rem that I use for testing and deliberately includes spaces to make sure
rem that the process works using such names. These will need to be changed to suit your situation.

SET "sourcedir=u:\your files"

FOR /f "tokens=1*delims=_" %%b IN ('dir /b /a-d "%sourcedir%\*_*.jpg"') DO (
 ECHO MD "%sourcedir%\%%b"
 ECHO MOVE "%sourcedir%\%%b_%%c" "%sourcedir%\%%b"
)

GOTO :eof
    • 在应用于实际数据之前,始终根据测试目录进行验证。**

所需的MD命令仅用于测试目的。验证命令正确后,将ECHO MD更改为MD以实际创建目录。追加2>nul以隐藏错误消息(例如,当目录已存在时)
所需的MOVE命令仅用于测试目的。验证命令正确后,将ECHO MOVE更改为MOVE以实际移动文件。追加>nul以隐藏报告消息(例如1 file moved
当然,如果您想处理当前目录,可以删除整个%sourcedir%\
dir命令仅列出目录中的文件名,然后仅列出与*_*.jpg匹配的文件名,即 * anything1 _ anything2 *. jpg
for /fanything1分配给%%b,将anything2.jpg分配给%%c,使用_作为分隔符(参见提示中的for /?,或SO上的数千个项目以获取示例/文档)
然后创建目录并移动文件。
傻瓜!

nnvyjq4y

nnvyjq4y2#

您需要解析文件名以派生目标文件夹名称。

样品批文件

下面的批处理文件应该可以满足您的需要:

@echo off
for %%i in (*.jpg) do (
  for /f "delims=_" %%j in (%%i) do (
    md %%j
    move "%%~i" "%%j"
  )
 )
)

这将在“_”字符处拆分文件名以派生目标文件夹

示例输出

我从这个文件夹布局开始:

F:\projects\sx\batch>tree /f
  Folder PATH listing
  Volume serial number is 9C33-6BBD
  F:.
      create-test-data.cmd
      md-and-move.cmd
      BA-ML-6256_Gocchup1.jpg      
      BA-ML-6256_Gocchup2.jpg      
      BA-ML-17302_Gocchup1.jpg
      BA-ML-17302_Gocchup2.jpg

  No subfolders exist

运行该批处理文件将得到以下输出:

F:\projects\sx\batch>md-and-move.cmd
          1 file(s) moved.
  A subdirectory or file BA-ML-6256 already exists.
          1 file(s) moved.
          1 file(s) moved.
  A subdirectory or file BA-ML-17302 already exists.
          1 file(s) moved.

并生成以下文件夹布局:

F:\projects\sx\batch>tree /f
  Folder PATH listing
  Volume serial number is 9C33-6BBD
  F:.
  │   create-test-data.cmd
  │   md-and-move.cmd
  │
  ├───BA-ML-6256
  │       BA-ML-6256_Gocchup1.jpg
  │       BA-ML-6256_Gocchup2.jpg
  │
  └───BA-ML-17302
          BA-ML-17302_Gocchup1.jpg
          BA-ML-17302_Gocchup2.jpg

相关问题