【问题标题】:Create A to Z subfolders from a main folder which comprises of thousands of files从包含数千个文件的主文件夹创建 A 到 Z 子文件夹
【发布时间】:2018-02-19 18:50:26
【问题描述】:

主文件夹内容(示例)

apple.txt
art.txt
berry.txt
cherry.txt
coffee.txt
..,
...
...
zebra.txt

预期输出(子文件夹)

A
  apple.txt
  art.txt
B
  berry.txt
C
  cherry.txt
  coffee.txt
...
...
...
Z
  zebra.txt

如何通过 Windows 批处理文件完成此操作?

【问题讨论】:

  • 只测试第一个字符,如果匹配则将其复制到匹配目录。提示:%var:~0,1%
  • 你能给我指一个参考资料,我可以在其中了解更多关于%var:~0,1% 的信息吗?我什至不知道用什么关键词谷歌...
  • 一段字符串称为子串
  • 一会儿我会添加一些参考答案。

标签: file batch-file command-line automation


【解决方案1】:

这是我快速编写的脚本。 基本上创建一个dir如果不存在,然后搜索脚本根目录下的所有.txt文件,然后测试单词的第一个字母,然后简单的复制到匹配的目录。

@echo off
setlocal enabledelayedexpansion
for %%i in (A B C D E F G H I J K L M N O P Q R S T U V W X Y Z) do (
   if not exist %%i mkdir %%i
)
for %%f in (*.txt) do (
set "file=%%f"
set "var=!file:~0,1!"
echo move "%%~dpf!file!" "%%~dpf!var!\" 
)
pause

测试后,只需删除倒数第二行中copy 之前的echo 即可实际执行copy 任务

【讨论】:

  • 应该注意,如果碰巧没有名称以相应字母开头的文件,此脚本可能会导致空文件夹 - 但我认为这不一定是问题。跨度>
  • @JeffZeitlin 同意,我们可以将其更改为先测试字符,然后创建目录。但就像我们都同意的那样,emtry dirs。除非 OP 要求,否则这不是问题。
  • 可能movecopy 更接近提问者的意图。
  • 如果没有暂停或超时,他们将无法看到回显的命令。只删除上面的for 循环并将if not exist 行移到move 上方作为If Not Exist "!var!\" MD "!var!" 是否更有意义? (只会创建必要的文件夹,另外还会为非字母字符创建)
  • @compo 如杰夫所述。我可以进行字符检查然后 mkdir 但它会创建多个大小写目录,除非您包含大写调用。可以包含数字字符,但有什么限制?我们可以创建10file.txt1000file.txt,这样 OP 就有了基础知识,他可以从这里获取。 :)
【解决方案2】:

类似的东西可以解决问题:

@echo off
setlocal enabledelayedexpansion
for %%f in (*.txt) do (
    set "file=%%f"
    set "NewFolder=!file:~0,1!"
    If not exist "!NewFolder!" MD "!NewFolder!"
    echo Move "%%~dpf!file!" "%%~dpf!NewFolder!\" 
)
pause

测试后,只需在move 之前删除echo 命令

【讨论】:

    猜你喜欢
    • 2011-12-25
    • 2021-09-17
    • 2018-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多