标题: [文件操作] 【已处理】批处理怎么判断文件是否是只读的 [打印本页]
作者: 回家路上 时间: 2015-7-10 21:25 标题: 【已处理】批处理怎么判断文件是否是只读的
本帖最后由 回家路上 于 2015-7-10 23:28 编辑
需求:
1)对文件夹下子文件进行遍历
2)找出所有的abc.xml(举例)文件
3)如果文件只读改为不是只读,【并记录】
4)对文件操作(测试的话,输出文件名代替罢了)
5)将所以修改只读属性的文件恢复。
可是判断文件是否只读没有头绪,求教。
作者: CrLf 时间: 2015-7-10 21:59
最直接的是这样:复制代码
当然你也可以这样:- attrib /s abc.xml | findstr "^.....R"
复制代码
或者用这样(看不懂就算了,这是来炫技巧的...):- for /r %%a in (abc.xml) do (
- for /f "tokens=2 delims=r" %%b in ("%%~aa") do echo %%a
- )
复制代码
作者: 回家路上 时间: 2015-7-10 22:24
回复 2# CrLf
嘿,谢谢。
我在cmd窗口执行 attrib abc.xml
会把abc.xml文件的全路径也显示。这个在匹配的时候其实是不算的吗?- A R D:\Code\Batch\abc.xml
复制代码
就是说如果文件名或者文件路径中有“R”是不会匹配的吗?
作者: 回家路上 时间: 2015-7-10 22:42
本帖最后由 回家路上 于 2015-7-10 22:43 编辑
回复 2# CrLf
哦,指定了,前面只有五个字符。谢啦。
赞一个
然后我在使用的时候- for /r %%a in (abc.xml) do (
- attrib %%a | findstr "^.....R" >nul&& do something
- attrib %%a | findstr "^.....R" >nul|| do something
- )
复制代码
这样好不?
作者: CrLf 时间: 2015-7-11 01:46
回复 4# 回家路上
用 dir /ar /s /b abc.xml 更好呀
作者: 回家路上 时间: 2015-7-11 11:00
本帖最后由 回家路上 于 2015-7-11 11:05 编辑
回复 5# CrLf
嗯,这个dir可以直接找出只读的所有文件
而我是想对所有pom.xml文件进行操作,无论是否只读。
所以没有选择dir,而是两方面进行判定。
可是有出现了新的问题——utf-8的文件读取怎么不正确啊。
pom.xml————utl-8格式的- <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
- <modelVersion>4.0.0</modelVersion>
- <groupId>cn.snsoft.ftc</groupId>
- <artifactId>SNS-ftc_tomcat</artifactId>
- <name>SNS-ftc_tomcat</name>
- <version>1.0.0-SNAPSHOT</version>
- <packaging>jar</packaging>
- <dependencies>
- <!-- 依赖 -->
- <dependency>
- <groupId>cn.com.test</groupId>
- <artifactId>TestUtil</artifactId>
- <version>1.0.0</version>
- <type>jar</type>
- </dependency>
- </project>
复制代码
我在读取的时候,想输出到一个新的文件里,发现是乱码,
然后改为控制台直接输出就是i乱码的。怎么解?- @echo off&setlocal enabledelayedexpansion
- for /r %%a in (*pom.xml) do (
- attrib %%a | findstr "^.....R">nul && set staus=1
- if "!staus!"=="1" (call :replace %%a readonly) else call :replace %%a
- set staus=0
- )
- pause & exit /b
-
- :replace
- if not "%2"=="" (
- attrib -R %1 & echo 去除只读
- call :deal %1
- attrib +R %1 & echo 恢复只读
- ) else (
- echo 文件不是只读,直接操作
- call :deal %1
- )
- goto :eof
-
- :deal
- echo 操作%~dp1%~nx1文件
- for /f "delims=" %%c in (%1) do (
- echo %%c
- )
- ::>>%~dp1pom_bak.xml
- goto :eof
复制代码
其实简单就是说,我想把一个utf-8的文本文件修改其中一个字符串(无论是否只读),然后其他都不变(该恢复的都恢复)。
然后只是这样读取的话乱码,该怎么办?求教- for /f "delims=" %%c in (pom.xml) do (
- echo %%c
- )
复制代码
作者: 回家路上 时间: 2015-7-11 14:09
本帖最后由 回家路上 于 2015-7-11 14:27 编辑
回复 5# CrLf
或者处理单个的时候引用VB、JS都行。我这还有的整没
论坛里另一个帖子http://www.bathome.net/thread-33057-1-1.html
找了一个例子,但是不知道怎么往我这里面加了。貌似,cscript命令不能放在bat标签里- @if (0)==(0) echo off
- set "htmlfile=pom.xml"
- cscript -nologo -e:jscript "%~0" "%htmlfile%"
- pause
- goto :EOF
- @end
-
- arg = WScript.Arguments;
- with (new ActiveXObject("ADODB.Stream")){
- Mode = 3;
- Type = 2;
- Charset = "utf-8";
- Open();
- LoadFromFile(arg(0));
- s = ReadText(-1);
- s = s.replace(/1\.0\.0-SNAPSHOT/ig, '2.0.0-SNAPSHOT');
- Position = 0;
- WriteText(s);
- SetEOS;
- SaveToFile(arg(0), 2)
- }
复制代码
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |