找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 24537|回复: 8

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

[复制链接]
发表于 2019-5-24 12:41:47 | 显示全部楼层 |阅读模式
该代码是将文件夹下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+'"')

}
发表于 2019-5-24 14:09:29 | 显示全部楼层
回复 1# chao111111


    dir /s/b/a-d *.txt
 楼主| 发表于 2019-5-24 14:50:40 | 显示全部楼层
回复 2# amwfjhh


修改完执行显示语法不正确
发表于 2019-5-24 16:08:51 | 显示全部楼层
提取文件夹路径,pushd到文件夹下再执行你这个脚本,或者修改下js部分,将路径部分处理考虑进去
发表于 2019-5-24 23:09:53 | 显示全部楼层
  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. }
复制代码
 楼主| 发表于 2019-5-25 20:37:50 | 显示全部楼层
回复 5# amwfjhh
非常感谢,解决了 :lol :lol
发表于 2019-5-26 11:40:24 | 显示全部楼层
回复 6# chao111111


    还好你把代码出处顶上来了,对比了下js部分代码是不对的,参考原作稍加改动过滤了下不符合条件的文件名。
 楼主| 发表于 2019-5-26 19:46:40 | 显示全部楼层
还有一个问题,受累给看看
当前有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
)
发表于 2019-5-26 21:57:05 | 显示全部楼层
把需要的文件名列表组装出来,按照7z的创建压缩包的命令来写就行了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-19 05:13 , Processed in 0.018599 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表