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

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

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

  1. BA-ML-6256_Gocchup1.jpg
  2. BA-ML-6256_Gocchup2.jpg
  3. BA-ML-17302_Gocchup1.jpg
  4. BA-ML-17302_Gocchup2.jpg

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

  1. BA-ML-6256
  2. BA-ML-17302

我尝试使用这个脚本:

  1. @echo off
  2. for %%i in (*) do (
  3. if not "%%~ni" == "organize" (
  4. md "%%~ni" && move "%%~i" "%%~ni"
  5. )
  6. )

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

  1. BA-ML-6256_Gocchup1
  2. BA-ML-6256_Gocchup2
  3. BA-ML-17302_Gocchup1
  4. BA-ML-17302_Gocchup2

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

gtlvzcf8

gtlvzcf81#

  1. @ECHO OFF
  2. SETLOCAL
  3. rem The following setting for the directory is a name
  4. rem that I use for testing and deliberately includes spaces to make sure
  5. rem that the process works using such names. These will need to be changed to suit your situation.
  6. SET "sourcedir=u:\your files"
  7. FOR /f "tokens=1*delims=_" %%b IN ('dir /b /a-d "%sourcedir%\*_*.jpg"') DO (
  8. ECHO MD "%sourcedir%\%%b"
  9. ECHO MOVE "%sourcedir%\%%b_%%c" "%sourcedir%\%%b"
  10. )
  11. 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#

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

样品批文件

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

  1. @echo off
  2. for %%i in (*.jpg) do (
  3. for /f "delims=_" %%j in (%%i) do (
  4. md %%j
  5. move "%%~i" "%%j"
  6. )
  7. )
  8. )

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

示例输出

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

  1. F:\projects\sx\batch>tree /f
  2. Folder PATH listing
  3. Volume serial number is 9C33-6BBD
  4. F:.
  5. create-test-data.cmd
  6. md-and-move.cmd
  7. BA-ML-6256_Gocchup1.jpg
  8. BA-ML-6256_Gocchup2.jpg
  9. BA-ML-17302_Gocchup1.jpg
  10. BA-ML-17302_Gocchup2.jpg
  11. No subfolders exist

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

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

并生成以下文件夹布局:

  1. F:\projects\sx\batch>tree /f
  2. Folder PATH listing
  3. Volume serial number is 9C33-6BBD
  4. F:.
  5. create-test-data.cmd
  6. md-and-move.cmd
  7. ├───BA-ML-6256
  8. BA-ML-6256_Gocchup1.jpg
  9. BA-ML-6256_Gocchup2.jpg
  10. └───BA-ML-17302
  11. BA-ML-17302_Gocchup1.jpg
  12. BA-ML-17302_Gocchup2.jpg
展开查看全部

相关问题