Board logo

标题: [文件操作] [已解决]批处理如何修改二级目录下的pdf文件名? [打印本页]

作者: liaoguinan    时间: 2024-1-16 18:08     标题: [已解决]批处理如何修改二级目录下的pdf文件名?

本帖最后由 liaoguinan 于 2024-1-16 22:57 编辑




如何修改每个文件夹下的pdf文件名?
按顺序从1开始排,如下图





作者: newswan    时间: 2024-1-16 19:05

如果显示正确,去掉 13行 #
  1. @cd /d %~dp0 & powershell -command "Get-Content '%~0' | Select-Object -Skip 1 | Out-String | Invoke-Expression" & pause & exit/b
  2. Get-ChildItem -Path . -Directory | ForEach-Object {
  3. $fName = $_.Name
  4. Push-Location $_
  5. $i = 0
  6. Get-ChildItem -Path . -File | Sort-Object {
  7. ( $_.basename -replace "${fName}-","" ) -as [int]
  8. } | ForEach-Object {
  9. $i++
  10. $NameNew = "${fName}-$i" + $_.Extension
  11. $_.Name + " " + $NameNew
  12. #Rename-Item $_ $NameNew
  13. }
  14. Pop-Location
  15. }
复制代码

作者: liaoguinan    时间: 2024-1-16 20:56

回复 2# newswan


    13行的代码如果注释掉的话执行没任何修改,去掉注释,能修改序号,但是会把后面的中文字都删掉了
作者: liaoguinan    时间: 2024-1-16 20:56

回复 2# newswan


    如何保留后面的中文字且修改序号?
作者: newswan    时间: 2024-1-16 21:39

  1. @cd /d %~dp0 & powershell -command "Get-Content '%~0' | Select-Object -Skip 1 | Out-String | Invoke-Expression" & pause & exit/b
  2. Get-ChildItem -Path . -Directory | ForEach-Object {
  3. $fName = $_.Name
  4. Push-Location $_
  5. $i = 0
  6. Get-ChildItem -Path . -File | Sort-Object {
  7. ( $_.BaseName -replace "${fName}-(\d+).*","`$1" ) -as [int]
  8. } | ForEach-Object {
  9. $i++
  10. $NameNew = "${fName}-$i" + ( $_.BaseName -replace "${fName}-(\d+)","" ) + $_.Extension
  11. $_.Name + "    " + $NameNew
  12. #Rename-Item $_ -NewName $NameNew
  13. }
  14. Pop-Location
  15. }
复制代码
回复 4# liaoguinan
作者: liaoguinan    时间: 2024-1-16 22:56

回复 5# newswan


    感谢辛苦了完美
作者: qixiaobin0715    时间: 2024-1-17 10:09

本帖最后由 qixiaobin0715 于 2024-1-17 20:29 编辑

用纯P练练手,未测试,可能有误:
  1. @echo off
  2. for /f "delims=" %%i in ('dir /b /ad') do (
  3.     pushd "%%i"
  4.     setlocal enabledelayedexpansion
  5.     for /f "tokens=2* delims=-" %%a in ('dir /b /a-d *.pdf') do (
  6.         set str=%%b
  7.         set /a n=str
  8.         if !n! gtr 0 (
  9.             if !n! lss 10 (
  10.                 set _a_!n!=!str:~1!
  11.             ) else if !n! lss 100 (
  12.                 set _b_!n!=!str:~2!
  13.             ) else if !n! lss 1000 (
  14.                 set _c_!n!=!str:~3!
  15.             )
  16.         )
  17.     )
  18.     for /f "tokens=2* delims=_=" %%a in ('set _') do (
  19.         set /a m+=1
  20.         ren "%%i-%%a%%b" "%%i-!m!%%b"
  21.     )
  22.     endlocal
  23.     popd
  24. )
  25. pause
复制代码

作者: qixiaobin0715    时间: 2024-1-17 20:31

回复 1# liaoguinan
修改第7行,将一对叹号去掉试试,已修改。




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