【问题标题】:How to get name of file in Command prompt如何在命令提示符下获取文件名
【发布时间】:2020-03-05 00:26:18
【问题描述】:

目前,我的程序应该执行以下操作

  1. 在 for 循环中,检查第一个附件的文件大小。
  2. 检查文件大小后,我将保存正在读取的文件的名称。
  3. 执行算法以计算所需大小并在其后面添加 KB。
  4. 使用 ImageMagick 选择所需的路径输出、所需的文件大小和输入文件名
for %S in Images\RAW_IMAGE\*.jpg) do set outsize=%~zS & set name=%~nxS  & set /a outsize=(outsize*80/100)/1024 & set outsize=%outsize%KB & cd Images\RAW_IMAGE & mogrify -path Images\COMPRESSED_IMAGE  -define jpeg:extent=%outsize% %name%

由于某种原因,运行后出现此错误

: mogrify: 无法打开图片 '%name%'

它应该是文件名,因为我已经逐步测试了单个文件的代码并且它可以工作。

我怀疑由于我对代码在 CMD 中的工作方式缺乏了解,因此未更新超大尺寸和名称值。

如果有人能指出我做错了什么,我将不胜感激。

【问题讨论】:

  • 尽管您的代码是不完整的,(当前不正确),但您有延迟扩展问题。我不会立即将其作为Variables are not behaving as expected 的副本关闭,因为在您的代码被修复之前,您不太可能将解决方案翻译成您所拥有的。
  • 我建议如果您在循环中一次处理一个图像而不是目录,请使用 convert (IM6) 或 magick (IM7) 而不是 mogrify。它不设置输出名称。

标签: windows batch-file command-prompt


【解决方案1】:

我没有mogrify,所以我无法测试这个批处理文件,所以你需要为我们做测试。

@echo off
setlocal enabledelayedexpansion
for %%i in (.\Images\RAW_IMAGE\*.jpg) do (
    set outsize=%%~zi
    set /a outsize=(outsize*80/100^)/1024
    set "name=%%~nxi"
    pushd .\Images\RAW_IMAGE
    mogrify -path Images\COMPRESSED_IMAGE  -define jpeg:extent=!outsize!KB !name!
    popd
)

【讨论】:

  • 非常感谢,代码有效,但我能否要求澄清一下,'^' 符号的目的是什么,因为即使在使用延迟扩展之后,我的号码似乎也很时髦,但在添加后'^' 符号,它可以在我的原始代码上完美运行。
  • 插入符号^ 用于转义结束专利) 否则代码认为这是我关闭for 循环的地方
猜你喜欢
  • 1970-01-01
  • 2011-09-27
  • 2012-10-31
  • 1970-01-01
  • 1970-01-01
  • 2014-05-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多