找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 27585|回复: 6

[文件操作] 【已处理】批处理怎么判断文件是否是只读的

[复制链接]
发表于 2015-7-10 21:25:06 | 显示全部楼层 |阅读模式
本帖最后由 回家路上 于 2015-7-10 23:28 编辑

需求:
1)对文件夹下子文件进行遍历
2)找出所有的abc.xml(举例)文件
3)如果文件只读改为不是只读,【并记录】
4)对文件操作(测试的话,输出文件名代替罢了)
5)将所以修改只读属性的文件恢复。

可是判断文件是否只读没有头绪,求教。

评分

参与人数 1PB +2 收起 理由
Batcher + 2 感谢给帖子标题标注[已解决]字样

查看全部评分

发表于 2015-7-10 21:59:10 | 显示全部楼层
最直接的是这样:
  1. dir /ar /s abc.xml
复制代码
当然你也可以这样:
  1. attrib /s abc.xml | findstr "^.....R"
复制代码
或者用这样(看不懂就算了,这是来炫技巧的...):
  1. for /r %%a in (abc.xml) do (
  2.    for /f "tokens=2 delims=r" %%b in ("%%~aa") do echo %%a
  3. )
复制代码

评分

参与人数 1技术 +1 收起 理由
回家路上 + 1 乐于助人

查看全部评分

 楼主| 发表于 2015-7-10 22:24:46 | 显示全部楼层
回复 2# CrLf


嘿,谢谢。

我在cmd窗口执行 attrib abc.xml
会把abc.xml文件的全路径也显示。这个在匹配的时候其实是不算的吗?

  1. A    R       D:\Code\Batch\abc.xml
复制代码
就是说如果文件名或者文件路径中有“R”是不会匹配的吗?
 楼主| 发表于 2015-7-10 22:42:19 | 显示全部楼层
本帖最后由 回家路上 于 2015-7-10 22:43 编辑

回复 2# CrLf

哦,指定了,前面只有五个字符。谢啦。
赞一个
然后我在使用的时候

  1. for /r %%a in (abc.xml) do (
  2.         attrib %%a | findstr "^.....R" >nul&& do something
  3.         attrib %%a | findstr "^.....R" >nul|| do something
  4. )
复制代码
这样好不?
发表于 2015-7-11 01:46:18 | 显示全部楼层
回复 4# 回家路上


    用 dir /ar /s /b abc.xml 更好呀
 楼主| 发表于 2015-7-11 11:00:33 | 显示全部楼层
本帖最后由 回家路上 于 2015-7-11 11:05 编辑

回复 5# CrLf


嗯,这个dir可以直接找出只读的所有文件
而我是想对所有pom.xml文件进行操作,无论是否只读。
所以没有选择dir,而是两方面进行判定。
可是有出现了新的问题——utf-8的文件读取怎么不正确啊。
pom.xml————utl-8格式的

  1. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  2.         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  3.         <modelVersion>4.0.0</modelVersion>
  4.         <groupId>cn.snsoft.ftc</groupId>
  5.         <artifactId>SNS-ftc_tomcat</artifactId>
  6.         <name>SNS-ftc_tomcat</name>
  7.         <version>1.0.0-SNAPSHOT</version>
  8.         <packaging>jar</packaging>
  9.         <dependencies>
  10.                 <!-- 依赖 -->
  11.                 <dependency>
  12.                         <groupId>cn.com.test</groupId>
  13.                         <artifactId>TestUtil</artifactId>
  14.                         <version>1.0.0</version>
  15.                         <type>jar</type>
  16.                 </dependency>
  17. </project>
复制代码
我在读取的时候,想输出到一个新的文件里,发现是乱码,
然后改为控制台直接输出就是i乱码的。怎么解?

  1. @echo off&setlocal enabledelayedexpansion
  2. for /r %%a in (*pom.xml) do (
  3.         attrib %%a | findstr "^.....R">nul && set staus=1
  4.         if "!staus!"=="1" (call :replace %%a readonly) else call :replace %%a
  5.         set staus=0
  6. )
  7. pause & exit /b

  8. :replace
  9. if not "%2"=="" (
  10.         attrib -R %1 & echo 去除只读
  11.         call :deal %1
  12.         attrib +R %1 & echo 恢复只读
  13. ) else (
  14.         echo 文件不是只读,直接操作
  15.         call :deal %1
  16. )
  17. goto :eof

  18. :deal
  19. echo 操作%~dp1%~nx1文件
  20. for /f "delims=" %%c in (%1) do (
  21.         echo %%c
  22. )
  23. ::>>%~dp1pom_bak.xml
  24. goto :eof
复制代码
其实简单就是说,我想把一个utf-8的文本文件修改其中一个字符串(无论是否只读),然后其他都不变(该恢复的都恢复)。
然后只是这样读取的话乱码,该怎么办?求教

  1. for /f "delims=" %%c in (pom.xml) do (
  2.     echo %%c
  3. )
复制代码
 楼主| 发表于 2015-7-11 14:09:20 | 显示全部楼层
本帖最后由 回家路上 于 2015-7-11 14:27 编辑

回复 5# CrLf


或者处理单个的时候引用VB、JS都行。我这还有的整没
论坛里另一个帖子http://www.bathome.net/thread-33057-1-1.html
找了一个例子,但是不知道怎么往我这里面加了。貌似,cscript命令不能放在bat标签里

  1. @if (0)==(0) echo off
  2. set "htmlfile=pom.xml"
  3. cscript -nologo -e:jscript "%~0" "%htmlfile%"
  4. pause
  5. goto :EOF
  6. @end

  7. arg = WScript.Arguments;
  8. with (new ActiveXObject("ADODB.Stream")){
  9.         Mode = 3;
  10.         Type = 2;
  11.         Charset = "utf-8";
  12.         Open();
  13.         LoadFromFile(arg(0));
  14.         s = ReadText(-1);
  15.         s = s.replace(/1\.0\.0-SNAPSHOT/ig, '2.0.0-SNAPSHOT');
  16.         Position = 0;
  17.         WriteText(s);
  18.         SetEOS;
  19.         SaveToFile(arg(0), 2)
  20. }
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-18 22:44 , Processed in 0.021565 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表