批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程
[批处理文件精品]批处理版照片整理器[批处理文件精品]纯批处理备份&还原驱动在线第三方下载
返回列表 发帖

[文本处理] 【已解决】BAT批量修文件里的内容,以文件名替换,支持多个子文件夹的?

本帖最后由 滴血雄鹰 于 2019-3-14 16:06 编辑

批量修文件里的内容,以文件名替换,支持多个子文件夹的?

如:E:\0000\有多个文件夹名为1至100,在文件夹名为1至100下各有一个1.vmx至100.vmx文件,在vmx文件中都有9999的内容,要批量修改vmx文件里的内容9999,以vmx文件名替换,如何实现?(BAT放在E:\0000目录下)

E:\0000\1\1.vmx
...
E:\0000\100\100.vmx


----------------------------------------------------------------------------------------------
下面代码是只支持本目录下运行的,不支持子目录:
将  *.vmx改成E:\0000\*.vmx,也不行。
  1. ::批量修改vmx文件里的内容9999,以vmx文件名替换
  2. @Echo Off
  3. SetLocal EnableDelayedExpansion
  4. For %%i In (*.vmx) Do (
  5.     For /F "Usebackq Delims=" %%j In ("%%~nxi") Do (
  6.         Set Str=%%j
  7.         Echo !Str:9999=%%~ni!>>New_%%~nxi
  8.     )
  9.     Del %%~nxi >nul
  10.     Ren New_%%~nxi %%~nxi
  11. )
复制代码
----------------------------------------------------------------------------------------------

下面是用“目录名+文件名”来替换“111”
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "delims=" %%a in ('dir /a-d /b /s *.txt') do (
  3.     set "filename=%%~a"
  4.     set "filename=!filename:%~dp0=!"
  5.     (for /f "usebackq delims=" %%b in ("%%~a") do (
  6.     set "line=%%~b"
  7.     call :getline "!filename!"
  8.     echo.!line!
  9.     ))>#
  10.     move # "%%~a"
  11. )
  12. goto :eof
  13. :getline
  14. set "line=!line:111=%~1!"
复制代码
我只需要用“文件名”来替换“111”,怎么改?

没有人会么?

TOP

没有人会么?

TOP

没有人会么?

TOP

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "delims=" %%a in ('dir /a-d /b /s *.vmx') do (
  4.     pushd "%%~dpa"
  5.     (for /f "delims=" %%b in ('type "%%a"') do (
  6.         set "line=%%b"
  7.         set "line=!line:9999=%%~na!"
  8.         echo,!line!
  9.     ))>"%%~nxa.tmp"
  10.     move /y "%%~nxa.tmp" "%%~nxa"
  11.     popd
  12. )
复制代码
1

评分人数

【扫描二维码捐助论坛的朋友请留言注明论坛账号】http://bbs.bathome.net/thread-10403-1-1.html
【批处理在线视频分享】http://bbs.bathome.net/thread-31727-1-1.html
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html

TOP

返回列表