【问题标题】:.BAT file to move files into folders and subfolders by filename... can't get subfolders to work.BAT 文件按文件名将文件移动到文件夹和子文件夹中......无法让子文件夹工作
【发布时间】:2015-05-17 19:35:13
【问题描述】:

我就是想不通。

我有一堆名称格式为:“PREFIX_PREFIX2_filename.pdf”的文件

我想将它们分类到这样的文件夹中:“PREFIX/PREFIX2/(files)”

这是我目前所拥有的:

setlocal enableextensions disabledelayedexpansion

for %%f in (*_*_*.pdf, *_*_*.png) do (
    for /f "tokens=1, 2 delims=_" %%p in ("%%~nf") do (
        for %%d in ("%%~dpf.") do if /i not "%%~p"=="%%~nd" (
            if not exist "%%~dpf\%%~p"  md "%%~dpf\%%~p"
            if not exist "%%~dpf\%%~p"  md "%%~dpf\%%~p"
            move "%%~ff" "%%~dpf\%%~p"
        )
    )
)

这会根据第一个前缀对它们进行排序,但我无法进一步了解,老实说,我什至不确定这里发生了什么。这种 CMD 语言给我带来了我所见过的最丑陋和不可思议的东西。

我已经阅读了一堆类似的问题,但仍然无法解决。

如果有人能告诉我如何完成这个肯定相对简单的任务,并向我解释这里到底发生了什么,我将不胜感激。

【问题讨论】:

  • for %f in (*_*_*.*) do @for /f "tokens=1,2* delims=_" %p in ("%~nf") do @echo %~ff %~dpf%p\%q\%r%~xf 从命令行运行上一个示例,可能会有所帮助。要在批处理脚本中使用,请将所有 % 符号加倍。恕我直言,你的路很好......

标签: batch-file cmd directory


【解决方案1】:

这个方法比较简单:

setlocal

for /F "tokens=1,2* delims=_" %%a in ('dir /B *_*_*.pdf *_*_*.png') do (
   if not exist "%%a" md "%%a"
   if not exist "%%a\%%b" md "%%a\%%b"
   move "%%a_%%b_%%c" "%%a\%%b\%%c"
)

即:dir /B *_*_*.pdf 命令生成PREFIX_PREFIX2_filename.pdf 格式的名称列表。 for /F "tokens=1,2* delims=_" %%a 以这种方式将这些名称分成 3 个标记:%%a=PREFIX%%b=PREFIX2%%c=filename.pdf。其余的很明显......

PS - 我建议你将标题中的sort 字改为move。第一项给出了一个完全不同的任务的想法......

【讨论】:

  • 啊,非常感谢,成功了。我试图从这里的其他问题中的一些类似脚本中弄清楚发生了什么,但无法掌握符号的窍门。不过有一件事,我确实必须在它起作用之前做些小改动——我认为应该是for /f "tokens=1,2* delims=_" %%a in ...。除此之外效果很好。我现在也将按照您的建议更改标题。
猜你喜欢
  • 2016-06-22
  • 2021-08-02
  • 2020-03-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多