windows - 无法遍历文件名中带有空格的文件、Windows 批处理文件和图像魔法
问题描述
我试图遍历一堆文件夹,创建子文件夹然后循环文件,用 imagemagick 转换它们并将它们放入新的子文件夹并重命名它们。某些文件的名称中有空格并导致错误...我该如何解决这个问题?
错误信息 :
convert: unable to open image 'photo': No such name or directory @error/blob.c/OpenBlob/3489. convert: no decode delegate for this image format '' @ error/constitute.c/ReadImage/554.**
文件夹结构看起来像这样... 文件夹结构看起来像这样...
batch_file.bat
folder_a
...photo 1.jpg
...photo1.jpg
folder_b
...photo 1.jpg
...photo2.png
我希望它以这样的方式结束
batch_file.bat
folder_a
...300
......1.webp
......1.jpg
......2.webp
......2.jpg
...600
......1.webp
......1.jpg
......2.webp
......2.jpg
...photo 1.jpg
...photoC.jpg
folder_b
...300
......1.webp
......1.jpg
......2.webp
......2.jpg
...600
......1.webp
......1.png
......2.webp
......2.png
...photo 1.jpg
...photoA.png
如果可能的话,我想将文件重命名为 1.jpg、1.webp、2.jpg、2.webp 等...
批处理文件看起来像这样......
@echo off
SETLOCAL ENABLEDELAYEDEXPANSION
%~d1
CD "%~p1"
SET FOLDERS=300 600
FOR /D %%r IN (*) DO (
CD %%r
ECHO In Folder: %%r
FOR %%f IN (%FOLDERS%) DO (
MD %%f
ECHO In Folder: %%f
PAUSE
FOR %%a IN (*.jpg, *.png) DO (
convert %%a -sampling-factor 4:2:0 -strip -quality 85 -interlace JPEG -colorspace RGB -resize %%f %%f\%%a
ECHO Converting File: %%a
mogrify -format webp %%f\%%a
PAUSE
)
)
CD ..
)
解决方案
要处理带有空格的文件名,请引用它们。例如你的命令
convert %%a -sampling-factor 4:2:0 -strip -quality 85 -interlace JPEG -colorspace RGB -resize %%f %%f\%%a
应该改为
convert "%%a" -sampling-factor 4:2:0 -strip -quality 85 -interlace JPEG -colorspace RGB -resize "%%f" "%%f\%%a"
与mogrify
命令相同:
mogrify -format webp "%%f\%%a"
当没有空格时,引号不会造成任何伤害,因此最好习惯于始终引用路径名或文件名。
推荐阅读
- git - 如何使用 Git 令牌通过 Travis CI / Cloudfoundry 访问私有存储库?
- eclipse - 如何以嵌入式方式在 Eclipse 中打开文件?
- c++ - 需要对具有可比较对象和不可比较对象的 std::pair 进行排序
- python - 路径字符串中的子进程空间
- sql - 如何在视图上创建全文索引
- ios - React Native 指纹捕获
- redis - Redis-Cluster READONLY - 读取操作如何负载平衡?
- php - Laravel 模型属于当前用户和全局用户
- sql - SQL Server 提取状态是否终止,然后不显示该 ID 的先前记录
- python - 在 python 中使用关键字或唤醒词激活 Tkinter 窗口