标题: [文本处理] 批处理如何修改txt文件中查找的部分 [打印本页]
作者: yunyan100 时间: 2017-9-9 12:04 标题: 批处理如何修改txt文件中查找的部分
hi,大家好,有个问题要请教下各位首先下面是我已经能99%做到的,就是将当前文件夹下的文件全部建为空值,- @echo off
- if exist 1.txt del /q/f 1.txt
- if exist ok rd /s/q ok &md ok
- for /f "delims=" %%i in ('dir /b /a-d /s "*"') do ( echo %%i >>1.txt)
- call notepad.exe 1.txt
- pause
- for /f "delims=" %%a in (1.txt) do (
- call :vcn "%%a"
- :vcn
- set vcnn=%~dp1
- set vdnn=%~nx1
- md "%vcnn%"
- echo .>"%vcnn%%vdnn%"
- )
复制代码
下面是得到的1.txt文件,-
- E:\应用软件\autodesk\MAX2016_64bit\de\Autodesk.DataManagement.Client.Framework.Forms.resources.dll
复制代码
这段里,我想要的功能就是重建的空文件,就是建立在要改的路径下:将E:\应用软件\autodesk\MAX2016_64bit改为E:\应用软件\autodesk\MAX2016_64bit\ok,即- E:\应用软件\autodesk\MAX2016_64bit\ok\de\Autodesk.DataManagement.Client.Framework.Forms.resources.dll
复制代码
也可是变量:- %temp%\ok\de\Autodesk.DataManagement.Client.Framework.Forms.resources.dll
复制代码
,就是保证替换的部位即为当前的目录%~dp0要改,后面的保证不变,谢谢了
作者: yunyan100 时间: 2017-9-9 14:57
回复 1# yunyan100
看来有点难度呢,另外,要修改的位置是不固定的,后面也不是固定的,只是%~dp0后面的不改变,txt中是什么就什么,只是要修改生成的位置,所以就是查用%~dp0来改变%~dp0
作者: slore 时间: 2017-9-9 20:08
回复 2# yunyan100
获取当前目录名,然后输出到1.txt文件时,把当前目录替换为空,你得到的1.txt文件里面只保存相对路径就行了.
或者先计算当前目录名的长度,然后%x:~x,y%截取断也行.
作者: yunyan100 时间: 2017-9-10 11:33
本帖最后由 yunyan100 于 2017-9-10 11:34 编辑
回复 3# slore
大神,能提供下代码么?这东文字不确定多少,符号不确定的,所以for 分段不行,另外echo出的文件,如果有&或其他一些批处理敏感的符号,到&就不再输出,而且&的位置也是不确定的
作者: slore 时间: 2017-9-12 20:42
回复 4# yunyan100
用set替换当前路径为空,得到相对路径的方法如下:- @echo off&setlocal ENABLEDELAYEDEXPANSION
- cd /d "%~dp0"
-
- echo %cd%
- set "currdir=%cd%"
- for /f "delims=" %%i in ('dir /b /a-d /s "*"') do (
- call :get_relative_path "%%~i"
- )
-
- type 1.txt
- pause
- goto :EOF
-
- :get_relative_path
- set "full_path=%~1"
- set rel_path=!full_path:%currdir%=!
- >>1.txt (echo "%rel_path%")
复制代码
自己读出1.txt的时候根据情况解除2边引号吧,不加引号的话,&符号echo会悲剧.
作者: yunyan100 时间: 2017-10-6 15:53
回复 5# slore
谢谢,我用的这种- Mode con cols=88 lines=26
- :0
- @echo off&setlocal ENABLEDELAYEDEXPANSION
- set inpa=<nul&set pa=<nul
- cls
- color a
- echo.
- echo.
- echo 批量空文件制作
- echo.
- @set /p inpa=当前目录是:%~dp0,请直接拖入要空建的文件夹按回车:
- if "%inpa%" =="" (
- goto :0
- )else (set pa=%inpa%& goto :dd
- )
-
- :dd
- rd /s/q %temp%\ff &md %temp%\ff\ok
- del /s/q %temp%\ff\1.txt
- cd /d "%pa%"
- cls
- echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo.
- echo. 正在写入中......
-
- for /f "delims=" %%i in ('dir /b /a-d /s "*"') do (
- echo %%~i >>%temp%\ff\1.txt
- )
- set "src=%pa%"
- set "dst=%temp%\ff\ok"
- (for /f "delims=" %%a in (%temp%\ff\1.txt) do (
- set "str=%%a"
- echo,!str:%src%=%dst%!
- ))>%temp%\ff\#
- move %temp%\ff\# %temp%\ff\1.txt
-
- cls
- echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo.
- echo. 已写入完成......
- call notepad.exe %temp%\ff\1.txt
- for /f "delims=" %%a in (%temp%\ff\1.txt) do (
- call :vcn "%%a"
- )
- cls
- start explorer.exe %temp%\ff
- goto :0
-
- :vcn
- set vcnn=%~dp1
- set vdnn=%~nx1
- md "%vcnn%"
- echo .>"%vcnn%%vdnn%"
- goto :eof
复制代码
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |