[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
  1. @echo off
  2. for %%i in (a.txt) do set x=%%~ai
  3. echo,%x%|findstr /i "h">nul 2>nul&&attrib -h a.txt||attrib +h a.txt
  4. echo,%x%|findstr /i "s">nul 2>nul&&attrib -s a.txt||attrib +s a.txt
复制代码
我在自己的机子上试了。不知道是我系统的问题还是怎样。好像+h和+s两个不能同时存在。不知道你们有没有碰到这样的情况。
1

评分人数

    • wxcute: 不好意思,我没有描述清楚。两个属性是同时 ...PB + 3

TOP

新答案:
  1. @echo off
  2. for %%i in (a.txt) do set "x=%%~ai"&set "file=%%i"
  3. if /i "%x:~3,1%" equ "h" (
  4.     if /i "%x:~4,1%" equ "s" (
  5.         attrib -h -s "%file%"
  6.     ) else attrib +h +s "%file%"
  7. ) else attrib +h +s "%file%"
复制代码
1

评分人数

    • wxcute: 还真快呀。呵呵PB + 6

TOP

下面这个是用的方法是读取参数的属性。代码精心设计了一下,更具人性化。
  1. @echo off&setlocal enabledelayedexpansion&cls
  2. if "%~1" == "" (
  3.     echo=请把要设置属性的文件或文件夹拖到该窗口。(手动输入也是可以的。)
  4.     set "file="&set /p file=文件或文件夹完整路径=
  5.     if "!file!" == "" (endlocal&%~s0&exit)
  6.     if not exist "!file!" (cls&echo=文件或文件夹[!file!]不存在。请重新输入。&pause&endlocal&%~s0&exit)
  7.     call :file !file!
  8.     if /i "!x:~3,1!" equ "h" (
  9.         if /i "!x:~4,1!" equ "s" (
  10.             attrib -h -s "!file!"
  11.         ) else attrib +h +s "!file!"
  12.     ) else attrib +h +s "!file!"
  13. ) else (
  14.     set "x=%~a1"
  15.     set "file=%~1"
  16.     if /i "!x:~3,1!" equ "h" (
  17.         if /i "!x:~4,1!" equ "s" (
  18.             attrib -h -s "!file!"
  19.         ) else attrib +h +s "!file!"
  20.     ) else attrib +h +s "!file!"
  21. )
  22. exit
  23. :file
  24. set "x=%~a1"
  25. set "file=%~1"
  26. goto :EOF
复制代码
两种运行方式:
1.双击运行批处理。然后把要设置属性的文件或文件夹拖到cmd.exe窗口上放开再回车。
2.直接把要设置属性的文件或文件夹拖到批处理上放开就可以了。
另外还想请问一下。除了用参数的%~a1和for的%%~ai这种方法还有没有其它办法获得文件的属性?比如读取文件属性的命令。
1

评分人数

    • wxcute: 很好哦。用一个IF同时判断两个属性岂不是更 ...PB + 6

TOP

回复 6楼 的帖子

4楼的代码看着眼花??是没看懂吧?“层次分明”得很啊。给你个建议,以后像写if %tmp:~4,2%== H这样的字符比较最好等号两边都用双引号“关闭”,如if "%tmp:~4,2%" == " H"。不然到时候出错了还不知道是怎么回事。另外照你那样的判断方法好像还少了一种情况吧?if "%tmp:~4,2%" == "  "两种属性都没有的情况。还有,%tmp:~4,2%应该是%tmp:~3,2%吧?“delims=&”中的&哪来的?真不知道你代码写好后试过没。

原来attrib自己就可以查看文件的属性啊,一直都忽视了呢,惭愧惭愧!
  1. @echo off&setlocal enabledelayedexpansion&cls
  2. if "%~1" == "" (
  3.     echo=请把要设置属性的文件或文件夹拖到该窗口。(手动输入也是可以的。)
  4.     set "ph="&set /p ph=文件或文件夹完整路径=
  5.     if "!ph!" == "" (endlocal&%~s0&exit)
  6.     if not exist "!ph!" (cls&echo=文件或文件夹[!ph!]不存在。请重新输入。&pause&endlocal&%~s0&exit)
  7.     for /f "delims=" %%i in ('attrib !ph!') do (set "x=%%i")
  8.     if /i "!x:~4,1!" equ "h" (
  9.         if /i "!x:~3,1!" equ "s" (
  10.             attrib -h -s "!ph:"=!"
  11.         ) else attrib +h +s "!ph:"=!"
  12.     ) else attrib +h +s "!ph:"=!"
  13. ) else (
  14.     set "x=%~a1"
  15.     set "ph=%~1"
  16.     if /i "!x:~3,1!" equ "h" (
  17.         if /i "!x:~4,1!" equ "s" (
  18.             attrib -h -s "!ph!"
  19.         ) else attrib +h +s "!ph!"
  20.     ) else attrib +h +s "!ph!"
  21. )
复制代码
也是两种运行方式,同4楼。

[ 本帖最后由 zljzsmzzx 于 2009-7-4 00:27 编辑 ]
1

评分人数

    • wxcute: 新方法,追加分。PB + 3

TOP

回复 8楼 的帖子

用“delims="表示不用分隔符。

TOP

返回列表