标题: [文本处理] 【已解决】BAT批量修文件里的内容,以文件名替换,支持多个子文件夹的? [打印本页]
作者: 滴血雄鹰 时间: 2019-2-3 08:15 标题: 【已解决】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,也不行。- ::批量修改vmx文件里的内容9999,以vmx文件名替换
- @Echo Off
- SetLocal EnableDelayedExpansion
- For %%i In (*.vmx) Do (
- For /F "Usebackq Delims=" %%j In ("%%~nxi") Do (
- Set Str=%%j
- Echo !Str:9999=%%~ni!>>New_%%~nxi
- )
- Del %%~nxi >nul
- Ren New_%%~nxi %%~nxi
- )
复制代码
----------------------------------------------------------------------------------------------
下面是用“目录名+文件名”来替换“111”- @echo off&setlocal enabledelayedexpansion
- for /f "delims=" %%a in ('dir /a-d /b /s *.txt') do (
- set "filename=%%~a"
- set "filename=!filename:%~dp0=!"
- (for /f "usebackq delims=" %%b in ("%%~a") do (
- set "line=%%~b"
- call :getline "!filename!"
- echo.!line!
- ))>#
- move # "%%~a"
- )
- goto :eof
- :getline
- set "line=!line:111=%~1!"
复制代码
我只需要用“文件名”来替换“111”,怎么改?
作者: 滴血雄鹰 时间: 2019-2-28 17:31
没有人会么?
作者: 滴血雄鹰 时间: 2019-3-5 08:55
没有人会么?
作者: 滴血雄鹰 时间: 2019-3-14 11:15
没有人会么?
作者: Batcher 时间: 2019-3-14 12:41
- @echo off
- setlocal enabledelayedexpansion
- for /f "delims=" %%a in ('dir /a-d /b /s *.vmx') do (
- pushd "%%~dpa"
- (for /f "delims=" %%b in ('type "%%a"') do (
- set "line=%%b"
- set "line=!line:9999=%%~na!"
- echo,!line!
- ))>"%%~nxa.tmp"
- move /y "%%~nxa.tmp" "%%~nxa"
- popd
- )
复制代码
欢迎光临 批处理之家 (http://bathome.net./) |
Powered by Discuz! 7.2 |