[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文本处理] 批处理如何修改txt文件中查找的部分

hi,大家好,有个问题要请教下各位首先下面是我已经能99%做到的,就是将当前文件夹下的文件全部建为空值,
  1. @echo off
  2. if exist 1.txt del /q/f 1.txt
  3. if exist ok rd /s/q ok &md ok
  4. for /f "delims=" %%i in ('dir /b /a-d /s "*"') do ( echo %%i >>1.txt)
  5. call notepad.exe 1.txt
  6. pause
  7. for /f "delims=" %%a in (1.txt) do (
  8. call :vcn "%%a"
  9. :vcn
  10. set vcnn=%~dp1
  11. set vdnn=%~nx1
  12. md "%vcnn%"
  13. echo .>"%vcnn%%vdnn%"
  14. )
复制代码
下面是得到的1.txt文件,
  1. E:\应用软件\autodesk\MAX2016_64bit\de\Autodesk.DataManagement.Client.Framework.Forms.resources.dll
复制代码
这段里,我想要的功能就是重建的空文件,就是建立在要改的路径下:将E:\应用软件\autodesk\MAX2016_64bit改为E:\应用软件\autodesk\MAX2016_64bit\ok,即
  1. E:\应用软件\autodesk\MAX2016_64bit\ok\de\Autodesk.DataManagement.Client.Framework.Forms.resources.dll
复制代码
也可是变量:
  1. %temp%\ok\de\Autodesk.DataManagement.Client.Framework.Forms.resources.dll
复制代码
,就是保证替换的部位即为当前的目录%~dp0要改,后面的保证不变,谢谢了

回复 5# slore


    谢谢,我用的这种
  1. Mode con cols=88 lines=26
  2. :0
  3. @echo off&setlocal ENABLEDELAYEDEXPANSION
  4. set inpa=<nul&set pa=<nul
  5. cls
  6. color a
  7. echo.
  8. echo.
  9. echo                          批量空文件制作
  10. echo.
  11. @set /p inpa=当前目录是:%~dp0,请直接拖入要空建的文件夹按回车:
  12. if "%inpa%" =="" (
  13. goto :0
  14. )else (set pa=%inpa%& goto :dd
  15. )
  16. :dd
  17. rd /s/q %temp%\ff &md %temp%\ff\ok
  18. del /s/q %temp%\ff\1.txt
  19. cd /d "%pa%"
  20. cls
  21. echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo.
  22. echo.                      正在写入中......
  23. for /f "delims=" %%i in ('dir /b /a-d /s "*"') do (
  24. echo %%~i >>%temp%\ff\1.txt
  25. )
  26. set "src=%pa%"
  27. set "dst=%temp%\ff\ok"
  28. (for /f "delims=" %%a in (%temp%\ff\1.txt) do (
  29.     set "str=%%a"
  30.     echo,!str:%src%=%dst%!
  31. ))>%temp%\ff\#
  32. move %temp%\ff\# %temp%\ff\1.txt
  33. cls
  34. echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo.
  35. echo.                      已写入完成......
  36. call notepad.exe %temp%\ff\1.txt
  37. for /f "delims=" %%a in (%temp%\ff\1.txt) do (
  38. call :vcn "%%a"
  39. )
  40. cls
  41. start explorer.exe %temp%\ff
  42. goto :0
  43. :vcn
  44. set vcnn=%~dp1
  45. set vdnn=%~nx1
  46. md "%vcnn%"
  47. echo .>"%vcnn%%vdnn%"
  48. goto :eof
复制代码

TOP

回复 4# yunyan100

用set替换当前路径为空,得到相对路径的方法如下:
  1. @echo off&setlocal ENABLEDELAYEDEXPANSION
  2. cd /d "%~dp0"
  3. echo %cd%
  4. set "currdir=%cd%"
  5. for /f "delims=" %%i in ('dir /b /a-d /s "*"') do (
  6.     call :get_relative_path "%%~i"
  7. )
  8. type 1.txt
  9. pause
  10. goto :EOF
  11. :get_relative_path
  12. set "full_path=%~1"
  13. set rel_path=!full_path:%currdir%=!
  14. >>1.txt (echo "%rel_path%")
复制代码
自己读出1.txt的时候根据情况解除2边引号吧,不加引号的话,&符号echo会悲剧.

TOP

本帖最后由 yunyan100 于 2017-9-10 11:34 编辑

回复 3# slore
大神,能提供下代码么?这东文字不确定多少,符号不确定的,所以for 分段不行,另外echo出的文件,如果有&或其他一些批处理敏感的符号,到&就不再输出,而且&的位置也是不确定的

TOP

回复 2# yunyan100


获取当前目录名,然后输出到1.txt文件时,把当前目录替换为空,你得到的1.txt文件里面只保存相对路径就行了.
或者先计算当前目录名的长度,然后%x:~x,y%截取断也行.

TOP

回复 1# yunyan100

看来有点难度呢,另外,要修改的位置是不固定的,后面也不是固定的,只是%~dp0后面的不改变,txt中是什么就什么,只是要修改生成的位置,所以就是查用%~dp0来改变%~dp0

TOP

返回列表