Board logo

标题: [文件操作] bat批处理不执行子文件夹内文件 [打印本页]

作者: chao111111    时间: 2019-5-24 12:41     标题: 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+'"')

}
作者: amwfjhh    时间: 2019-5-24 14:09

回复 1# chao111111


    dir /s/b/a-d *.txt
作者: chao111111    时间: 2019-5-24 14:50

回复 2# amwfjhh


修改完执行显示语法不正确
作者: amwfjhh    时间: 2019-5-24 16:08

提取文件夹路径,pushd到文件夹下再执行你这个脚本,或者修改下js部分,将路径部分处理考虑进去
作者: amwfjhh    时间: 2019-5-24 23:09

  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. }
复制代码

作者: chao111111    时间: 2019-5-25 20:37

回复 5# amwfjhh
非常感谢,解决了 :lol :lol
作者: amwfjhh    时间: 2019-5-26 11:40

回复 6# chao111111


    还好你把代码出处顶上来了,对比了下js部分代码是不对的,参考原作稍加改动过滤了下不符合条件的文件名。
作者: chao111111    时间: 2019-5-26 19:46

还有一个问题,受累给看看
当前有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
)
作者: amwfjhh    时间: 2019-5-26 21:57

把需要的文件名列表组装出来,按照7z的创建压缩包的命令来写就行了。




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