[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文件操作] [已解决]批处理怎样判断一个已修改后缀文件的本质后缀

  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "delims=" %%i in ('dir /b /a-d /s *.jpg *.png') do (set "file=%%~nxi"
  3. if "!file:~-6!" neq ".9.png" (%~dp0cwebp.exe -q 88 "%%i" -o "%%~dpi%%~ni.webp"&del /s/q/f/a "%%i"&cd %%~dpi&ren "%%~ni.webp" "%%~nxi")
  4. )1>nul 2>nul
  5. pause
复制代码
如A.png转成A.webp后删除原A.png,A.webp被改为A.png取代了原先真PNG
能否通过脚本判断该A.png本质还是A.webp 则不再循环处理该A.png

本帖最后由 miqilaosu 于 2019-6-20 09:34 编辑

回复 1# smss


    文件名没变的话,你通过文件名判断就好了啊,%%~ni.png

TOP

本帖最后由 smss 于 2019-6-20 09:47 编辑

回复 2# miqilaosu
能想到的方法是对处理后的PNG加隐藏属性 规避脚本循环

TOP

本帖最后由 miqilaosu 于 2019-6-20 10:47 编辑

回复 3# smss


    处理完的文件后辍名不用PNG和jpg,因为后辍名不同所以不会被查到,这种方法使用的多一些
  1. ren "%%~ni.webp" "%%~nxixy"
复制代码
比如A.png改成A.pngxy   A.jpg改成A.jpgxy脚本执行结束前在批量改回来
  1. ren *.pngxy *.png
  2. ren *.jpgxy *.jpg
复制代码
反正批量改名处理很快
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   还有个笨的方法就是把所有文件加路径读取放到记事本
  1. dir /b /a-d /s *.jpg *.png>png.log
复制代码
,然后FOR读取记事本处理,不会出现重复循环

TOP

  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "delims=" %%i in ('dir /b /ad /a-h /s *.jpg *.png') do (set "file=%%~nxi"
  3. if "!file:~-6!" neq ".9.png" (%~dp0cwebp.exe -q 88 "%%i" -o "%%~dpi%%~ni.webp"&del "%%i"&cd %%~dpi&ren "%%~ni.webp" "%%~nxi"&attrib "%%~nxi" +r +h)
  4. )1>nul 2>nul
  5. pause
复制代码
通过对处理后文件加隐藏属性实现

TOP

本帖最后由 miqilaosu 于 2019-6-20 10:51 编辑

回复 5# smss


    *.webp 改回png,jpg操作一次,隐藏属性一次,隐藏属性改回来一次,同一文件操作了三次
    *.webp改成*.pngxy,*.jpgxy,一次,最后再回来一次,同一文件操作了二次
个人感觉操作次数越少越好
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "delims=" %%i in ('dir /b /ad /a-h /s *.jpg,*.png') do (set "file=%%~nxi"
  3. if "!file:~-6!" neq ".9.png" (%~dp0cwebp.exe -q 88 "%%i" -o "%%~dpi%%~ni.webp"&del "%%i"&cd %%~dpi&ren "%%~ni.webp" "%%~nxixy")
  4. )1>nul 2>nul
  5. ren *.pngxy *.png
  6. ren *.jpgxy *.jpg
  7. pause
复制代码

TOP

本帖最后由 smss 于 2019-6-20 11:13 编辑

回复 6# miqilaosu

你没有看明白 加隐藏是为了下次如果对该文件做同样的处理时规避重复操作
如:已对A文件夹下含所有子文件夹处理完毕 如果再次对A文件夹处理 则所有隐藏属性的图片将不会被再次处理,因为通过dir /b /ad /a-h /s过滤掉了 它将仅对那些新加入的图片(无隐藏属性的图片)处理

TOP

本帖最后由 miqilaosu 于 2019-6-20 13:13 编辑

回复 7# smss
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "delims=" %%i in ('dir /b /a-d /s *.jpg *.png') do (
  3. set "file=%%~nxi"&set "smss=9"
  4. findstr/i "%%i" webp.log >nul 2>nul&&set "smss="
  5. if defined smss (
  6. if "!file:~-6!" neq ".9.png" (%~dp0cwebp.exe -q 88 "%%i" -o "%%~dpi%%~ni.webp"&del /s/q/f/a "%%i"&cd %%~dpi&ren "%%~ni.webp" "%%~nxi"&&echo,%%i>>webp.log)
  7. )
  8. )1>nul 2>nul
  9. pause
复制代码
那这样写应该也可以吧

TOP

返回列表