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

[文件操作] bat批处理不执行子文件夹内文件

该代码是将文件夹下TXT文件名称中汉字数字替换成阿拉伯数字,代码如下,但是当前文件夹内可以执行,子文件夹内TXT不替换

1>1/* : www.bathome.net

@echo off

for /f "delims=" %%a in ('dir /a-d /b *.txt^|cscript -nologo -e:jscript "%~0"') do (

ren %%a

)

pause & exit /b

*/

var files = WSH.StdIn.ReadAll().split(/\r?\n/)

for(var i in files){

var newName = files.replace(

/[零一二三四五六七八九十][O零一二三四五六七八九十百千]*/gm,

function(match){

var str = match

str = str.replace(/[一二三四五六七八九]/g,function(match){return '+'+'空一二三四五六七八九'.search(match)})

str = str.replace(/([1-9])([十百千])/g,function(match,_1,_2){return _1 + ({'十':'*10','百':'*100','千':'*1000'}[_2])})

str = str.replace(/^十/,'+10')

str = str.replace(/(\*10+)0[零O](?!\+\d\1)/g,'$10')

return (/[^0-9\+\*]/.test(str)) ? match : eval(0+str)

}

)

WSH.Echo('"'+files+'" "'+newName+'"')

}

回复 1# chao111111


    dir /s/b/a-d *.txt
echo,hP1X500P[PZBBBfh#b##fXf-V@`$fPf]f3/f1/5++u5x>in.com

TOP

回复 2# amwfjhh


修改完执行显示语法不正确

TOP

提取文件夹路径,pushd到文件夹下再执行你这个脚本,或者修改下js部分,将路径部分处理考虑进去
echo,hP1X500P[PZBBBfh#b##fXf-V@`$fPf]f3/f1/5++u5x>in.com

TOP

  1. 1>1/* : www.bathome.net
  2. @echo off
  3. pushd %~dp0
  4. call :_Replace
  5. for /f "delims=" %%i in ('dir /s/b/ad') do (
  6. pushd %%~si
  7. call :_Replace
  8. popd
  9. )
  10. pause & exit /b
  11. :_Replace
  12. (
  13. for /f "delims=" %%a in ('dir /a-d /b *.txt^|cscript -nologo -e:jscript "%~s0"') do (
  14. echo,ren %%a
  15. ren %%a
  16. )
  17. goto :EOF
  18. )
  19. */
  20. var files = WSH.StdIn.ReadAll().split(/\r?\n/);
  21. for(var i in files){
  22. var nGoOn = /[零一二三四五六七八九十][O零一二三四五六七八九十百千]*/.test(files[i]);
  23. if (!nGoOn) continue
  24. var newName = files[i].replace(
  25. /[零一二三四五六七八九十][O零一二三四五六七八九十百千]*/gm,
  26. function(match){
  27. var str = match
  28. str = str.replace(/[一二三四五六七八九]/g,function(match){return '+'+'空一二三四五六七八九'.search(match)})
  29. str = str.replace(/([1-9])([十百千])/g,function(match,_1,_2){return _1 + ({'十':'*10','百':'*100','千':'*1000'}[_2])})
  30. str = str.replace(/^十/,'+10')
  31. str = str.replace(/(\*10+)0[零O](?!\+\d\1)/g,'$10')
  32. return (/[^0-9\+\*]/.test(str)) ? match : eval(0+str)
  33. }
  34. )
  35. WSH.Echo('"'+files[i]+'" "'+newName+'"')
  36. }
复制代码
echo,hP1X500P[PZBBBfh#b##fXf-V@`$fPf]f3/f1/5++u5x>in.com

TOP

回复 5# amwfjhh
非常感谢,解决了 :lol :lol

TOP

回复 6# chao111111


    还好你把代码出处顶上来了,对比了下js部分代码是不对的,参考原作稍加改动过滤了下不符合条件的文件名。
echo,hP1X500P[PZBBBfh#b##fXf-V@`$fPf]f3/f1/5++u5x>in.com

TOP

还有一个问题,受累给看看
当前有n个子文件夹,子文件夹下有很多内容,想把子文件夹下的内容压缩,下面的代码是把整个子文件夹压缩,我想只压缩里面的内容,压缩包以子文件夹命名

@echo off
::设置7ZIP路径
set "zip=C:\Program Files\7-Zip\7z.exe"

cd /d "%SourDir%"
for /d %%i in (*) do "%zip%" a -mx7 "%%i.zip" "%%i"
:: 确认压缩文件解压后可用,删除下面一行的echo以删除源文件夹
echo rd  /s /q %%i
)

TOP

把需要的文件名列表组装出来,按照7z的创建压缩包的命令来写就行了。
echo,hP1X500P[PZBBBfh#b##fXf-V@`$fPf]f3/f1/5++u5x>in.com

TOP

返回列表