根据文件名批量创建文件夹
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.exe 或 WinRAR.exe 时,此任务不需要批处理文件:
"%ProgramFiles%\WinRAR\WinRAR.exe" x -ad *.rar "Path\To\Destination\Folder\"
"secret" 是开关 -ad
,它正好适合这样的任务。
使用 WinRAR 的 GUI:
- Select 所有 *.rar 或 *.zip 档案。
- 单击工具栏中的提取到。
- Select 目标文件夹。
- 在杂项.
组中选中选项将档案提取到子文件夹
- 单击按钮 确定。
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的回复。好吧,无论如何我学到了更多关于批量编辑的知识。
我有一个包含 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.exe 或 WinRAR.exe 时,此任务不需要批处理文件:
"%ProgramFiles%\WinRAR\WinRAR.exe" x -ad *.rar "Path\To\Destination\Folder\"
"secret" 是开关 -ad
,它正好适合这样的任务。
使用 WinRAR 的 GUI:
- Select 所有 *.rar 或 *.zip 档案。
- 单击工具栏中的提取到。
- Select 目标文件夹。
- 在杂项. 组中选中选项将档案提取到子文件夹
- 单击按钮 确定。
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的回复。好吧,无论如何我学到了更多关于批量编辑的知识。