批量创建基于文件名的文件夹

时间:2015-02-03 12:59:38

标签: batch-file

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

我设法使用该脚本创建了适用于单个文件的文件夹:

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

4 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

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

您的代码失败有两个原因

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

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

答案 2 :(得分:0)

使用 Rar.exe WinRAR.exe 时,无需为此任务提供批处理文件:

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

“秘密”是开关-ad,它完全适合这样的任务。

使用WinRAR的GUI:

  1. 选择所有* .rar或* .zip档案。
  2. 点击工具栏中的提取到
  3. 选择目标文件夹。
  4. 检查其他组中将文件提取到子文件夹选项。
  5. 点击按钮确定
  6. WinRAR程序文件文件夹中的文本文件 Rar.txt 包含控制台版本 Rar.exe 的所有命令和可选开关的说明。

    WinRAR 的帮助,只需点击目录标签上的帮助主题,也可以解释所有命令和开关的<列表项命令行模式下的strong> WinRAR.exe 。

答案 3 :(得分:0)

感谢。它似乎现在正在运作。完成的代码是

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

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

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