【问题标题】:CMD Batch Create folders by files names and put it insideCMD Batch 按文件名创建文件夹并放入
【发布时间】:2012-08-12 17:35:50
【问题描述】:

我有大约 1000 个文件,例如:

_etc_sec
_home_host_www_temp
and etc.

如何根据文件名制作批处理文件以在彼此内部创建文件夹,然后将此文件放入其中。

所有文件都在 d:\ 因此,如果我们有名为 _etc_sec 的文件,我们必须创建名为 d:\etc 的文件夹,然后将文件 _etc_sec 放入文件 d:\etc

因此,如果我们有名为 _home_host_www_temp 的文件,我们必须创建名为 d:\home 的文件夹,然后在此文件夹中创建文件夹 host,然后在文件夹 host 中创建文件夹 www,然后将文件 _home_host_www_temp 放入文件 d:\home\host\www

我知道如何使用 VBA 做到这一点,但批处理 cmd 对我来说很难。谢谢。

【问题讨论】:

  • 您无法在 Windows 平台上使用任何语言执行您所要求的操作,因为 Windows 不允许在文件名中使用 /。 / 字符是 \ 文件夹分隔符的替代品,尽管它在 Windows 中并不总是可靠的。
  • 如果您知道如何在 VBA 中执行此操作,为什么不使用 VBScript 呢?语法与 VBA 几乎相同,可以直接在 cmd shell 中通过 cscript 命令运行。
  • 因为我使用 Excel 中的 VBA。它不舒服,需要更多的系统资源来执行代码。 CMD Batch 使用起来更简单,但编写起来很困难。

标签: batch-file cmd subdirectory


【解决方案1】:

使用SET搜索和替换将_改为\,然后使用FOR变量~p修饰符获取需要创建的完整路径。单个 MKDIR 命令可以创建一系列嵌套目录。我会在循环中打开和关闭延迟扩展,以防万一您的文件名带有 ! 字符。

@echo off
setlocal disableDelayedExpansion
for %%F in (*_*) do (
  set "file=%%F"
  setlocal enableDelayedExpansion
  for %%A in ("!file:_=\!") do (
    endlocal
    2>nul mkdir "%%~pA"
    >nul move "%%F" "%%~pA"
  )
)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-12-19
    • 1970-01-01
    • 2018-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多