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

[文件操作] [已解决]批处理如何修改二级目录下的pdf文件名?

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




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




1

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2

如果显示正确,去掉 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. }
复制代码

TOP

回复 2# newswan


    13行的代码如果注释掉的话执行没任何修改,去掉注释,能修改序号,但是会把后面的中文字都删掉了

TOP

回复 2# newswan


    如何保留后面的中文字且修改序号?

TOP

  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
1

评分人数

TOP

回复 5# newswan


    感谢辛苦了完美

TOP

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

评分人数

    • liaoguinan: 可以用但是会提示运算符不存在技术 + 1

TOP

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

TOP

返回列表