【问题标题】:batch script to create folder based on another folder name (music library基于另一个文件夹名称(音乐库)创建文件夹的批处理脚本
【发布时间】:2018-04-22 12:26:44
【问题描述】:

我一直在搜索并尝试创建一个基本的批处理脚本,该脚本将为我在目录中拥有的每个专辑创建一个文件夹.. 我可以展示我的图书馆的一个例子 audio folder exemple

我想要 艺术家1 - 1 / 艺术家1 - 2 / 艺术家1 - 3 / 艺术家1 - ... / 艺术家2 - 1 / 艺术家2 - ... / ...

在artist1、artist2、artist3...文件夹中,单个文件夹已移动。将复制的艺术家姓名也删除会很好,但这不是必需的。 如果它也不区分非大写字符和大写字符,那就太好了。

我在一个文件夹中有 3000 个专辑,手动编辑很痛苦。手动编辑需要我做很多工作,也许批处理文件对将来的使用也更有用。 我已经看到文件到文件夹批处理和其他一些,但我不确定如何为我的目的编辑它们.. bulkrenameutility 看起来不错,但不确定它是否能满足我的需求

编辑 1 - 我见过这样的东西,看起来不错。 但我希望能够选择一个文件夹,而不是一个名为 .psd 或 .jpg 的文件

//////

@echo off
setlocal enabledelayedexpansion
for %%A in (*.psd *.jpg) do (
   echo file found  %%A
   for /f "delims=" %%B in ("%%A") do set fname=%%~nB
   for /f "delims=" %%C in ("%%A") do set fextn=%%~xC
   for /f "tokens=1* delims=_" %%D in ("!fname!") do set folname=%%D
   echo folder name !folname!
   if not exist "!folname!" (
      echo Folder !folname! does not exist, creating
      md "!folname!"
   ) else (
      echo Folder !folname! exists
   )
   echo Moving file %%A to folder !folname!
   move "%%A" "!folname!"
   )
echo Finished
pause

//////

基本上就是这样

//////

@echo off

:: Needed because you are working with variables that are immediately called
setlocal enabledelayedexpansion

:: Start of the loop to get all files with a psd or jpg Extension
for %%A in (*.psd *.jpg) do (
   echo file found  %%A

:: Grabs only the file name
   for /f "delims=" %%B in ("%%A") do set fname=%%~nB

:: Grabs only the extension
   for /f "delims=" %%C in ("%%A") do set fextn=%%~xC

:: Using the File name it separates it into 2 part using "_" as a delimiter so 120_low becomes 120 and low
   for /f "tokens=1* delims=_" %%D in ("!fname!") do set folname=%%D
   echo folder name !folname!

:: Checks for the existence of the folder, if the folder does not exist it creates the folder
   if not exist "!folname!" (
      echo Folder !folname! does not exist, creating
      md "!folname!"
   ) else (
      echo Folder !folname! exists
   )

:: Moves the file to the folder
   echo Moving file %%A to folder !folname!
   move "%%A" "!folname!"
   )
echo Finished

//////

https://www.computerhope.com/forum/index.php?topic=152980.0

【问题讨论】:

  • 为了方便使用 node.js 脚本或 php 脚本。
  • multicommander.com 这样的东西不是更简单吗?不确定它可以做我想的,但也许有比在 node.js 中编程更简单的方法
  • 它是一个软件,你将如何发送命令到多指令?我对 multicommander 了解不多,以及他们是否提供任何脚本执行或宏。
  • 你是对的。在 node.js 中比批处理更容易?
  • 在你有专长的编程语言中更容易,虽然 node 更简单、更短、更甜

标签: file batch-file


【解决方案1】:

你的问题不清楚。有很多不完整的细节。您应该在问题中列出一些输入文件夹和带有此类输入的所需输出。例如,使用此输入:

Abdulla Rashim - weldiya (2012)
Abdulla Rashim - Weldiya E.P. (WAV)
Abdulla Rashim - A Shell of Speed
Abdulla Rashim - Unanimity

得到这个输出:

Abdulla Rashim 
    weldiya (2012)
    Weldiya E.P. (WAV)
    A Shell of Speed
    Unanimity

编辑:规格已根据以下说明进行了相应更改:

艺术家名字出现在每个当前文件夹中“-”之前除了最后一个字符,它必须是一个将被删除的空格,专辑名称是“-”之后的部分" 除了第一个字符外,必须是空格

下面的批处理文件就是这样做的:

@echo off
setlocal EnableDelayedExpansion

for /F "tokens=1* delims=-" %%a in ('dir /AD /B') do (
   set "part1=%%a" & set "part1=!part1:~0,-1!"
   set "part2=%%b" & set "part2=!part2:~1!"
   if not exist "!part1!" md "!part1!"
   move "!part1! - !part2!" "!part1!\!part2!"
)

如果您想要更清晰的答案,您应该发布更清晰的问题...

【讨论】:

  • 感谢您的回答。因为我并没有真正编程,所以我很难看出我的问题中可能缺少什么。你说的是正确的想法。我想要特定艺术家文件夹中的每张专辑。艺术家姓名出现在“-”之前的每个当前文件夹中我不确定缺少什么,因为您回答的正是我需要的。至少我认为你做到了。您的命令是否: 1. 从专辑前创建一个文件夹:Abdulla rashim - 专辑 1 2. 将所有其他同名文件夹添加到此文件夹 3. 将新复制的文件夹的名称重命名为仅专辑名称?谢谢
  • 好吧,在这种情况下,我邀请您接受我的答案,选择绿色复选标记并投票! ;)
  • 我尝试了该命令,它创建了文件夹,但没有将文件移入其中。我怎样才能让它将文件移动到创建的文件夹中并在移动时重命名文件夹?
  • 问题是一个细节:你说艺术家的名字出现在每个当前文件夹中的“-”之前,但最后一个字符这部分是空格,文件夹名不能以空格结尾。同一点适用于第二部分的第一个字符。我根据这个 新规范 修改了代码,但是您必须注意,如果任何文件夹的“-”分隔符的空格多于或少于 一个空格,则此程序将失败我>...
  • 哇,非常感谢。你很难做到吗?学习很费时间吗?太奇妙了。再次感谢
猜你喜欢
  • 2011-04-05
  • 1970-01-01
  • 2012-02-11
  • 1970-01-01
  • 1970-01-01
  • 2018-12-23
  • 1970-01-01
  • 1970-01-01
  • 2021-07-01
相关资源
最近更新 更多