为文件夹中的每个文件创建文件夹,并使用 cmd 或批处理从 CSV 命名文件夹

Posted

技术标签:

【中文标题】为文件夹中的每个文件创建文件夹,并使用 cmd 或批处理从 CSV 命名文件夹【英文标题】:Create folders for each file in the folder and name the folder from CSV using cmd or batch 【发布时间】:2020-12-19 09:02:05 【问题描述】:

我的要求是:我将有一个文件夹中的文件列表,我将有一个 csv /excel 表,其中我将有 2 列

    文件 ID 文件名(与文件夹中的文件名相同)。

现在我想为每个文件创建一个文件夹,但我想用文件 ID 命名文件夹,该文件 ID 是 CSV 文件名。

我尝试了下面的代码:

@echo off

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

这是为每个文件创建文件夹,但文件夹名称取自文件名。

我需要的是: 我希望从 csv 文件中获取文件夹名称,在该文件中,文件名和文件 ID 之间的映射作为列。

【问题讨论】:

此页面的右上角是一个? 图标,选择它然后选择tour 链接,一旦你这样做了,按照建议然后编辑你的问题,使其成为主题。 【参考方案1】:

在 CMD 中这是一件相当简单的事情

@( SETLOCAL ENABLEDELAYEDEXPANSION
  ECHO OFF
  SET "SrcFile=C:\Some\folder\files.csv"
  SET "RootFolder=C:\Path\To\Folder"
)


For /F "tokens=1* delims=," %%A IN ('
  Type "%SrcFile%"
')  DO (
  IF EXIST "%RootFolder%\%%~B" (
    IF NOT EXIST "%RootFolder%\%%~A\" ( MD "%RootFolder%\%%~A\" )
    MOVE /Y "%RootFolder%\%%~B"  "%RootFolder%\%%~A\%%~B"
  )
)

【讨论】:

非常感谢 Ben Personick,你是冠军。我想我会经常需要你的帮助,直到我的学习阶段完成。 Ben,是否有理由使用单引号和typeing 文件,而不是仅仅给出文件名并让for 阅读它?显然 (?) 您需要使用 usebackq 选项并将名称括在双引号中(以防它包含空格等)。这只是你的“风格”还是有一些使用type 的“角落案例”?

以上是关于为文件夹中的每个文件创建文件夹,并使用 cmd 或批处理从 CSV 命名文件夹的主要内容,如果未能解决你的问题,请参考以下文章

CMD for用法

s3cmd 同步是不是根据列表计算每个文件或提出请求定价

cmd扩展路径

如何使用批处理脚本对目录中的每个文件执行某些操作

使用BAT文件时如何向CMD输入命令?

请模拟一下win10的cmd