【问题标题】:batch - Directory of the currently processed file in batchbatch - 批量当前处理文件的目录
【发布时间】:2016-10-11 21:39:18
【问题描述】:

我正在尝试使用解包器来提取多个文件。我的脚本是这样的

for /R %%i in (*.ext) DO quickbms.exe -o script.bms "%%i" "%%~ni"

问题是当我从C:\archives 删除文件时,它会将所有文件提取到该目录,包括C:\archives\dir1、C:\archives\dir2、etc. 中的档案

如何在自己的文件夹中提取所有档案,而无需手动启动每个文件夹中的脚本?

【问题讨论】:

  • 所以%%~ni应该代表文件夹吧?
  • for /R %%i in (*.ext) DO quickbms.exe -o script.bms "%%i" "%%~dpni"
  • 我最终使用了for /R %%i in (*.ext) DO quickbms.exe -o script.bms "%%i" "%%~pi\%%~ni"@JosefZ,不过,你的版本更简洁一些,并且做同样的事情。能否请您将其发布为答案?

标签: batch-file batch-processing


【解决方案1】:
for /R %%i in (*.ext) DO quickbms.exe -o script.bms "%%~i" "%%~dpni"

请阅读for /?:修饰符可以组合得到复合结果。

Command Line arguments (Parameters):

  • …
  • %~f1 将 %1 扩展为完全限定的路径名​​ - C:\utils\MyFile.txt
  • %~d1 仅将 %1 扩展为驱动器号 - C:
  • %~p1 仅将 %1 扩展为路径,例如\utils\ 这包括一个尾随 \,它将被解释为转义字符 一些命令。
  • %~n1 将 %1 扩展为没有文件扩展名的文件名 C:\utils\MyFile 或仅存在路径(没有尾随 反斜杠) - 该路径中的最后一个文件夹。
  • …

您的"%%~pi\%%~ni" 将导致(根据上述示例)\utils\\MyFile.txt(注意两个连续的\\ reverse solidi)。
幸运的是,批处理解释器将路径中的双倍 \\(甚至是倍数)反斜杠视为单个 \reverse solidus...

【讨论】:

  • 感谢您的链接!我需要那个。
猜你喜欢
  • 2013-06-08
  • 2011-05-24
  • 1970-01-01
  • 2021-12-02
  • 2014-09-03
  • 1970-01-01
  • 2015-03-06
相关资源
最近更新 更多