Board logo

标题: [已解决]20元求助批处理命名文本文件 [打印本页]

作者: lxh623    时间: 2020-6-6 18:53     标题: [已解决]20元求助批处理命名文本文件

本帖最后由 lxh623 于 2020-6-6 18:55 编辑

文本文件都是在几级子文件夹下。

文本a:
X88n1658--重编诸天传(二卷)--〖宋.行霆述〗—第1658部卍續藏第88册
J01nA042--大慧普觉禅师年谱(1卷)--〖宋 祖咏编 张抡序 宗演跋〗—嘉興藏第01冊 正編042

现有文件名,含有—后面等部分,比如:
第1658部卍續藏第88册P0421 重編諸天傳(二卷), 〖宋.行霆述〗
嘉興藏第01冊 正編042  大慧普覺禪師年譜(1卷) 〖宋 祖詠編 張掄序 宗演跋〗  

需要的文件名是:
X88n1658--重编诸天传(二卷)--〖宋.行霆述〗
J01nA042--大慧普觉禅师年谱(1卷)--〖宋 祖咏编 张抡序 宗演跋〗

谢谢!
作者: flashercs    时间: 2020-6-6 19:29

  1. @echo off
  2. cd /d "%~dp0"
  3. for /r . %%A in ("*—*.txt") do (
  4.   for /f "delims=—" %%B in ("%%~nA") do (
  5.     echo ren "%%A" "%%B%%~xA"
  6.     ren "%%A" "%%B%%~xA"
  7.   )
  8. )
  9. pause
  10. exit /b
复制代码

作者: zaqmlp    时间: 2020-6-6 20:43

本帖最后由 zaqmlp 于 2020-6-7 13:07 编辑
  1. <# :
  2. cls
  3. @echo off
  4. mode con lines=5000
  5. cd /d "%~dp0"
  6. powershell -NoProfile -ExecutionPolicy bypass "Invoke-Command -ScriptBlock ([ScriptBlock]::Create([IO.File]::ReadAllText('%~f0',[Text.Encoding]::Default))) -Args '%~dp0'"
  7. pause
  8. exit
  9. #>
  10. $path=$args[0];
  11. $txtfile=$path+"a.txt";
  12. if(-not (test-path -liter $txtfile)){Write-host ('"'+$txtfile+'" not found');exit;};
  13. $text=[IO.File]::ReadAllLines($txtfile,[Text.Encoding]::Default);
  14. $files=@(dir -liter $path -recurse|?{$_ -is [System.IO.FileInfo]});
  15. for($i=0;$i -lt $files.length;$i++){
  16.     for($j=0;$j -lt $text.Count;$j++){
  17.         $arr=$text[$j].split('—');
  18.         if($arr.length -ge 2){
  19.             if($files[$i].BaseName.Contains($arr[1])){
  20.                 $newname=$arr[0]+$files[$i].Extension;
  21.                 $newfile=$files[$i].Directory.FullName+'\'+$newname;
  22.                 write-host $files[$i].FullName;
  23.                 write-host '-->';
  24.                 write-host $newname;
  25.                 write-host '';
  26.                 mv -liter $files[$i].FullName $newfile;
  27.                 break;
  28.             };
  29.         };
  30.     };
  31. }
复制代码

作者: lxh623    时间: 2020-6-7 07:38

flashercs 发表于 2020-6-6 19:29

文本a是哪里?谢谢!
作者: flashercs    时间: 2020-6-7 08:51

回复 4# lxh623
  1. @echo off
  2. cd /d "%~dp0"
  3. set filea="文本a.txt"
  4. for /f "usebackq tokens=1,2 delims=—" %%I in (%filea%) do (
  5.   for /r . %%A in ("%%J*.txt") do (
  6.       echo ren "%%A" "%%I%%~xA"
  7.       ren "%%A" "%%I%%~xA"
  8.     )
  9. )
  10. pause
  11. exit /b
复制代码

作者: lxh623    时间: 2020-6-7 10:23

回复 5# flashercs
请查收!
谢谢。




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