标题: [文本处理] 批量修改文件夹下的desktop.ini [打印本页]
作者: SGTeam 时间: 2020-3-18 01:36 标题: 批量修改文件夹下的desktop.ini
最近深刻的研究了一下每个文件夹下的desktop.ini配置文件
依据该文件可以修改文件夹的诸多信息
奈何本人对bat批处理研究不深刻
劳烦大佬们帮忙
现有A.txt文件中存有文本
实例1
实例2
现在需要根据A.TXT进行批量写入(目标目录下的每一个文件夹中的desktop.ini)
目录为:D:\
该磁盘中有1和2两个文件夹
需要达到目标:每个文件夹中都有desktop.ini且包含以下内容
[.ShellClassInfo]
LocalizedResourceName=%%b(变量来自于A.txt)
例如:D:\1\desktop.ini中为:
[.ShellClassInfo]
LocalizedResourceName=实例1
感谢各位大佬帮忙!
作者: SGTeam 时间: 2020-3-18 01:39
想过诸多解决办法,有嵌套for循环的,
但是最后结果达到把实例1实例2都给写进去了我也不知道循环错在哪里了没停下来
作者: wujunkai 时间: 2020-3-18 10:03
本帖最后由 wujunkai 于 2020-3-18 10:16 编辑
回复 1# SGTeam - @echo off
- @setlocal enabledelayedexpansion
-
- :main
- (call:get_folder)>folder.txt
- call:fopen folder.txt name
- call:fopen A.txt info
- call:shell
- pause
- goto:eof
-
- :get_folder
- for /F %%i in ('dir /B D:\') do if exist D:\%%i\* echo %%i
- goto:eof
-
- :fopen
- rem %~1 为读取文件名,%~2为储存的变量名
- rem 若无%~2,使用%~n1作为储存的变量名
- set fopen_file=%~1
- if "%~2"=="" (
- set fopen_vale=%~n1
- ) else (
- set fopen_vale=%~2
- )
- set fopen_len=0
- for /F "tokens=*" %%i in (%~1) do (
- set %fopen_vale%[!fopen_len!]=%%i
- set /A fopen_len+=1
- )
- goto:eof
-
- :shell
- set /A len=%fopen_len%-1
- for /L %%i in (0,1,%len%) do (
- echo [.ShellClassInfo]>D:\!name[%%i]!\desktop.ini
- echo LocalizedResourceName=!info[%%i]!>>D:\!name[%%i]!\desktop.ini
- )
- goto:eof
复制代码
正常的思路应该是这样的,folder.txt自己删掉。
没事就不要嵌套循环了,bat对多行语句的支持不是很好
作者: SGTeam 时间: 2020-3-18 10:17
哇!!!太感谢了!!!!!
作者: SGTeam 时间: 2020-3-18 10:20
回复 3# wujunkai
您好!可以劳烦您稍加解释一下他是如何运作的吗?后面的我可以看得懂,前面的A.txt部分我有一点点懵
作者: SGTeam 时间: 2020-3-18 10:27
还有一点哦,我执行了之后,1文件夹下出现了实例2
作者: SGTeam 时间: 2020-3-18 10:30
出现拒绝访问,然后这个我百度一下如何解决吧,就是劳烦您,我的实际A.txt中会有很多的文本需要写入到很多文件夹,这个批处理程序会生效吗?
作者: wujunkai 时间: 2020-3-18 10:34
回复 5# SGTeam - @echo off
- @setlocal enabledelayedexpansion
-
- :main
- rem 主函数。。。。
- (call:get_folder)>folder.txt
- call:fopen folder.txt name
- call:fopen A.txt info
- rem call:shell
- pause
- goto:eof
-
- :get_folder
- rem 获取D:\下的文件夹 , 我觉得问题应该出现在这里
- for /F %%i in ('dir /B D:\') do if exist D:\%%i\* echo %%i
- goto:eof
-
- :fopen
- rem 读取文件
- rem %~1 为读取文件名,%~2为储存的变量名
- rem 若无%~2,使用%~n1作为储存的变量名
- set fopen_file=%~1
- if "%~2"=="" (
- set fopen_vale=%~n1
- ) else (
- set fopen_vale=%~2
- )
- set fopen_len=0
- for /F "tokens=*" %%i in (%~1) do (
- set %fopen_vale%[!fopen_len!]=%%i
- echo %fopen_vale%[!fopen_len!]=%%i
- set /A fopen_len+=1
- )
- goto:eof
-
- :shell
- rem 循环进行ini的写入
- set /A len=%fopen_len%-1
- for /L %%i in (0,1,%len%) do (
- echo [.ShellClassInfo]>D:\!name[%%i]!\desktop.ini
- echo LocalizedResourceName=!info[%%i]!>>D:\!name[%%i]!\desktop.ini
- )
- goto:eof
复制代码
把显示的内容发一下,我看看问题到底是什么
作者: SGTeam 时间: 2020-3-18 10:38
:fopen
rem %~1 为读取文件名,%~2为储存的变量名
rem 若无%~2,使用%~n1作为储存的变量名
set fopen_file=%~1
if "%~2"=="" (
set fopen_vale=%~n1
) else (
set fopen_vale=%~2
)
set fopen_len=0
for /F "tokens=*" %%i in (%~1) do (
set %fopen_vale%[!fopen_len!]=%%i
set /A fopen_len+=1
)
谢谢您!这部分的可以劳烦您稍微解释一下吗,前面的folder我看懂了是列出了D:\下的文件夹的名称
作者: wujunkai 时间: 2020-3-18 10:45
- :fopen
- rem %~1 为读取文件名,%~2为储存的变量名
- rem 若无%~2,使用%~n1作为储存的变量名
- set fopen_file=%~1
- if "%~2"=="" (
- set fopen_vale=%~n1
- ) else (
- set fopen_vale=%~2
- )
- set fopen_len=0
- rem 以上全部都是定义变量
- rem 以下是for /F 进行文件读入
- rem 实在看不懂建议去自己搜索一下for /F
- rem "tokens=*“是为了读入一行中的全部字符,不会被分割掉
- for /F "tokens=*" %%i in (%~1) do (
- set %fopen_vale%[!fopen_len!]=%%i
- set /A fopen_len+=1
- )
- goto:eof
复制代码
整个是一个封装好的函数,很久写的,应该是没什么bug,也用过很多次了。
现在在上网课,不能实时回复,抱歉
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |