Board logo

标题: [文件操作] 请帮着修改BAT代码拖放文件夹修改文件名 [打印本页]

作者: dzwind    时间: 2024-4-7 13:54     标题: 请帮着修改BAT代码拖放文件夹修改文件名

请各位大师帮忙看看以下的代码,我用AI做的,但执行不了,提示找不到文件。谢谢。
要求1、建好BAT文件后,以拖动文件夹至该BAT程序上执行
2、程序会将目录下的所有的docdocx文件改名,文件名称起以保留前2个字符,后面以时间的文件名。
想建的BAT内容如下:
  1. set /a folder=%1
  2. pushd %folder%
  3. for /r. %%f in (*.doc *.docx) do (
  4.     set filename=%%~nf
  5.     set newfilename=!filename:~0,2!-%date%.%ext!
  6.     ren "%%f" "%newfilename%"
  7. )
  8. popd
  9. echo 改名完成!
复制代码

作者: aloha20200628    时间: 2024-4-7 15:01

本帖最后由 aloha20200628 于 2024-4-7 15:26 编辑

回复 1# dzwind

订正代码如下
特别注意》被处理的目录/文件夹的路径文件名中如没有空格但包含 ^ 字符,将会导致拖入批处理脚本文件时出错 所以建议路径文件名不要包含 ^ 字符
  1. @echo off
  2. if "%~1"=="" exit/b
  3. pushd "%~1" &set "d=%date:/=-%"
  4. for /r %%F in (*.doc *.docx) do (
  5. set "nF=%%~nF" &setlocal enabledelayedexpansion
  6. ren "%%~F" "!nF:~,2!-%d%%%~xF" &endlocal
  7. )
  8. popd &pause &exit/b
复制代码

作者: ShowCode    时间: 2024-4-7 15:10

回复 1# dzwind
  1. @echo off
  2. if "%~1" == "" exit /b
  3. if not exist "%~1" exit /b
  4. cd /d "%~1"
  5. set "Today=%date:/=-%"
  6. for /r %%i in (*.doc) do (
  7.     set "BaseName=%%~ni"
  8.     setlocal enabledelayedexpansion
  9.     ren "%%~i" "!BaseName:~,2!-%Today%%%~xi"
  10.     endlocal
  11. )
复制代码

作者: dzwind    时间: 2024-4-7 15:20

谢谢楼上各位大师的无私帮助
作者: Five66    时间: 2024-4-7 19:45

本帖最后由 Five66 于 2024-4-7 19:51 编辑

保存为ansi编码的bat
文件夹名最好不要包含^&%之类的特殊字符
  1. @echo off
  2. if "%~1" == "%cd%\" echo error&pause&exit/b
  3. set bbb=""%*
  4. set bbb=%bbb:~2%
  5. setlocal enabledelayedexpansion
  6. if exist "!bbb!" (
  7. cd /d !bbb!
  8. if errorlevel 1 endlocal&pause&exit/b
  9. for %%i in ("!cd!") do endlocal&cd /d "%%~i"
  10. ) else endlocal&echo error&pause&exit/b
  11. set "ddd=%date:/=-%"
  12. for /r %%i in (*.doc) do (
  13. set name=%%~ni
  14. set ext=%%~xi
  15. setlocal enabledelayedexpansion
  16. rename "!name!!ext!" "!name:~,2!-%ddd%!ext!"
  17. endlocal
  18. )
  19. echo done&pause
复制代码

作者: 77七    时间: 2024-4-7 20:59

  1. @echo off
  2. for /f "delims=" %%a in ('powershell -c "'{0:yyyyMMdd_hhmmss}' -f (get-date)"') do (
  3. for /r "%~1" %%i in (*.doc?) do (
  4. set f=%%i
  5. set n=%%~nxi
  6. setlocal enabledelayedexpansion
  7. ren "!f!" "!n:~0,2!_%%a%%~xi"
  8. endlocal
  9. )
  10. )
  11. pause
复制代码





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