根据文件名批量创建文件夹

Batch create folders based on filename

我有一个包含 100 个存档文件(rar 和 zip)的文件夹。要将所有这些文件解压到单独的文件夹中,我想为每个文件名创建一个文件夹。 文件名的结构类似于“1111 2222_blablabla.rar”,文件名中至少有一个空space。

我设法使用脚本创建了可处理单个文件的文件夹:

set str=%1
set str=%str:~0,-5%
mkdir %str%

但是当我尝试将其集成到整个文件夹的脚本中时,"set" 不再起作用。

setlocal enabledelayedexpansion
for %%f in (*.rar) do (
set str=%f
set str=%str:~0,-5%
mkdir %str%
)
rem here will come the rar command
endlocal

有谁知道我做错了什么吗?

非常感谢,

jmp

enabledelayedexpansion 只是成功的一半。它允许您更新变量的值,但要访问修改后的值,您必须使用 !str! 而不是 %str%。这应该可以解决问题。

for %%f in (*.rar) do if not exist "%%~nf\" md "%%~nf"

对于每个 .rar 文件,使用文件的名称(不带扩展名)创建一个文件夹(如果它仍然不存在)

您的代码失败有两个原因

1 - 代码块内的变量(括号中的行)在开始执行代码块之前被替换为变量中的值。如果任何变量在块内更改其值,则无法从同一块内访问它。您需要使用延迟扩展 (setlocal enabledelayedexpansion) 并在需要时将语法从 %var% 更改为 !var! 以指示解析器必须延迟对变量值的访问,直到命令执行

2 - 如果字符串包含空格,命令 mkdir 1111 2222_blablabla 将创建两个文件夹,而不仅仅是一个。 File/folder 包含空格的引用应该被引用

使用 Rar.exeWinRAR.exe 时,此任务不需要批处理文件:

"%ProgramFiles%\WinRAR\WinRAR.exe" x -ad *.rar "Path\To\Destination\Folder\"

"secret" 是开关 -ad,它正好适合这样的任务。

使用 WinRAR 的 GUI:

  1. Select 所有 *.rar 或 *.zip 档案。
  2. 单击工具栏中的提取到
  3. Select 目标文件夹。
  4. 杂项.
  5. 组中选中选项将档案提取到子文件夹
  6. 单击按钮 确定

WinRAR 程序文件夹中的文本文件 Rar.txt 包含控制台版本 Rar.exe[的所有命令和可选开关的解释=41=].

WinRAR 的帮助通过单击 帮助主题 打开,帮助包含在 目录 选项卡还解释了列表项 命令行模式 .

WinRAR.exe 的所有命令和开关

谢谢。看来它现在正在工作。完成的代码是

setlocal enabledelayedexpansion
for %%f in (*.rar) do (
md "%%~nf" 
"C:\Program Files\WinRAR\unrar.exe" x "%%f" "%%~nf")
endlocal

由于没有任何重复文件夹的机会,我只是删除了不需要的内容。

刚发帖的时候看到了Mofi的回复。好吧,无论如何我学到了更多关于批量编辑的知识。