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

[文本处理] 去除文件名中的指定字符并添加指定后缀/字符串和移动文件

本帖最后由 pcl_test 于 2018-2-23 22:30 编辑

请教个高难度的批处理
更改文件夹里的图片名并移动到新文件夹里
比如D:/abc 自动去掉图片名里面的_
然后得到的文件名后面加_10.jpg
然后把改名的图片移动到
D:/bbh文件夹里

效果如下  当然图片名称是随机的不是固定的
比如D:/abc 里有  hj_ty.jpg和fvd_dcv.jpg  2个文件
运行后得到的是在
D:/bbh文件夹有  hjty_10.jpg和fvddcv_10.jpg
原来D:/abc里是没有图片文件的

本帖最后由 ivor 于 2018-2-20 18:39 编辑
  1. @echo off&setlocal ENABLEDELAYEDEXPANSION
  2. for /f "delims=" %%a in ('dir /b D:\abc\*.jpg') do (
  3.     set "file=%%a"
  4.     set "file=!file:_=!"
  5.     set "file=!file:.jpg=_10.jpg!"
  6.     move "D:\abc\%%a" "D:\bbh\!file!"
  7.     echo %%a
  8.    
  9. )
复制代码
#&cls&@powershell "Invoke-Expression ([Io.File]::ReadAllText('%~0',[Text.Encoding]::UTF8))" &pause&exit

TOP

@echo off

rem 参数设置,运行前请手动修改.
rem 源文件夹
set src=D:\abc
rem 目标文件夹
set dst=D:\bbh

rem 主体
rem ================================================

rem 要求源目录和目标路径已存在.
rem 否则,结束批处理.
rem 请建立相应的文件夹后重新运行批处理
if not exist %src% echo path %src% not exist & goto :eof
if not exist %dst% echo path %dst% not exist & goto :eof

setlocal EnableDelayedExpansion

rem 按规则重命名并移动所有.jpg .JPG文件
rem 如果指定的源目录下有子目录,所有子目录都会被忽略.
for   %%I in ( %src%\*.jpg %src%\*.JPG ) do (
        rem 按规则生成新文件名
        set fname=%%~nI
        set fdst=!fname:_=!_10.jpg
        set fdst=%dst%\!fdst!
       
        rem 有可能产生重名文件,如 a_b.jpg 和 a_b_.jpg
        rem 都对应 ab_10.jpg
        if exist !fdst! (
                rem 对重名文件.增加递增的后缀_dddd
                rem 形如 ab_10_1.jpg
                set count=0
                set new_fdst=!fdst:~0,-4!
                if exist !new_fdst!_*.jpg (
                        dir /b !new_fdst!_*.jpg | sort /r > tmp.txt
                        set /p count=<tmp.txt
                        rem 此处限制了count后缀最大为 99999999 (8个9),
                        rem 多于此数目,运行结果会出错
                        set count=!count:_=       !
                        set count=!count:~-7,3!
                )
                set /a count+=1
                set new_fdst=!new_fdst!_!count!.jpg
                echo new_fdst=!new_fdst!
                move /-Y %%~fI  !new_fdst! > nul
        ) else move /-Y %%~fI  !fdst! > nul
)
if exist tmp.txt del tmp.txt

TOP

回复 2# ivor

如果图片名称没带_ 好像就不行

TOP

回复 4# qsfish


    已更新源文件有无_(下划线)均可
#&cls&@powershell "Invoke-Expression ([Io.File]::ReadAllText('%~0',[Text.Encoding]::UTF8))" &pause&exit

TOP

返回列表