【问题标题】:Batch create folders from files with similar beginning but different ending从开头相似但结尾不同的文件批量创建文件夹
【发布时间】:2016-07-12 11:20:07
【问题描述】:

我有很多开头名称相似但结尾不同的文件。我必须为每个“系列”文件创建一个文件夹,这意味着所有文件的名称都以相同的 7 个字符开头。

查看图像以进行可视化:

我现在的代码是
for /F "Tokens=*" %%i in ('Dir /B *.jpg') do md "%%~ni"|copy "%%i" "%%~ni" 它只是为每个文件创建一个文件夹并将其放入其中。

不幸的是,我对这门语言没有足够的了解,只是在谷歌上搜索它只让我学会​​了如何创建子字符串 SET _result=%_test:~0,7%,而不是如何使用它创建文件夹。

我确定这只是一个简短的序列,有人可以帮我吗?

【问题讨论】:

  • | 构成管道,意思是将一个命令的输出传递给另一个命令的输入;我假设你只是想执行多个命令,所以使用&...

标签: batch-file directory


【解决方案1】:

这可能不是最有效的方法,但它应该对您有所帮助。下面的批处理脚本将输入文件夹和输出文件夹作为用户的输入。然后它会遍历输入文件夹中的所有文件,并将它们复制到输出文件夹下的子文件夹下,其中包含文件名的前 7 个字符。

@echo OFF
setlocal ENABLEDELAYEDEXPANSION
REM Get input directory from user
set /p INPUT_DIR=Please enter full path to directory with files:
REM Get ouput directory from user
set /p OUTPUT_DIR=Please enter full path to output directory:
REM Iterate through files and create necessary folders/copy files
for /f %%f in ('dir /b %INPUT_DIR%') do (
    set fullname=%%f
    set trimmedname=!fullname:~0,7!
    set fullpath=%OUTPUT_DIR%\!trimmedname!
    if not exist !fullpath! md !fullpath!
    copy %INPUT_DIR%\%%f !fullpath!
)

这是一个示例输出,显示了脚本完成的处理:

【讨论】:

  • 非常感谢您,它有效。不过我还有另一个问题:现在的名称长度不再只是 7,而是长度可以变化。所以我有 01234_x 和 012345_y 之类的东西,或者没有取消划线的东西,比如 01234。这应该不是很难,我只需要一个 IF 来检查名称是否包含下划线,如果是,则从前半部分创建一个子字符串。如果它不包含下划线,它应该只取全名。但是天哪,批处理编程很复杂,我只设法使 IF 工作,ELSE 由于某种原因抛出错误。你能帮我一下吗?
  • 只需将我的答案中的set trimmedname=!fullname:~0,7! 替换为for /f "tokens=1 delims=_." %%s in ('echo !fullname!') do set trimmedname=%%s,看看是否有帮助。此命令将使用 _. (以删除扩展名)拆分字符串,并使用第一个标记作为文件夹名称。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-29
相关资源
最近更新 更多