我有一个包含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
答案 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:
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的回复。好吧,无论如何,我学到了更多关于批量编辑的知识。