我正在Windows上编写一个批处理文件,它有一个参数:一个用7-zip创建的zip文件名。
此文件包含一个MySQL备份文件,例如backup.sql
。
我想恢复给定此zip文件的数据库。
所以,首先我将它提取到这样的临时目录:
path_to_7zip\7z e "%~1" -otemp_dir
现在是我的问题:我怎么知道提取文件的名称(即backup.sql
)?
我想写这样的东西:
path_to_mysql\mysql < extracted_file_name
(其中extracted_file_name
应为backup.sql
)
如果我不知道zip文件中的文件名,我应该写什么代替extracted_file_name
?
答案 0 :(得分:1)
您可以在空目录中提取文件,您可以确定它是唯一的当前文件。然后,您可以使用for指令在变量中收集此名称,并根据需要使用它。
FOR /F "tokens=*" %%F IN ('dir /b *.sql') DO path_to_mysql\mysql < %%F
请注意,如果存档中有多个SQL文件,则会处理所有这些文件。我认为这可能是一个奖励,但我认为你可以简单地用FOR
跳出GOTO
。
修改:仅使用 /F
形式的FOR
我忘了“正常”FOR
已经完成工作了我们需要。
FOR %%F IN (*.sql) DO path_to_mysql\mysql < %%F
请注意,只有当前目录是提取目录时,所有这些内容才有效,否则您必须相应地更改括号中的表达式。
答案 1 :(得分:0)
我认为7z有一个“l
”命令来列出档案的内容。将此输出传递给mysql。