Board logo

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

作者: smss    时间: 2019-6-20 09:09     标题: [已解决]批处理怎样判断一个已修改后缀文件的本质后缀

  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:28

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

回复 1# smss


    文件名没变的话,你通过文件名判断就好了啊,%%~ni.png
作者: smss    时间: 2019-6-20 09:35

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

回复 2# miqilaosu
能想到的方法是对处理后的PNG加隐藏属性 规避脚本循环
作者: miqilaosu    时间: 2019-6-20 09:55

本帖最后由 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读取记事本处理,不会出现重复循环
作者: smss    时间: 2019-6-20 10:31

  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
复制代码
通过对处理后文件加隐藏属性实现
作者: miqilaosu    时间: 2019-6-20 10:44

本帖最后由 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
复制代码

作者: smss    时间: 2019-6-20 11:04

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

回复 6# miqilaosu

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

本帖最后由 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
复制代码
那这样写应该也可以吧




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2