zoukankan      html  css  js  c++  java
  • 批处理程序在文件,文件夹管理中的应用

    下面是按照批处理脚本的教程写的几个关于文件,文件夹管理的脚本,都是运行通过的。每个脚本下面是运行过程中解决问题后觉得要注意的地方。

    转载请注明出处:博客园--邦邦酱好

    1. 批量更改文件名

    @echo off
    echo 开始更改文件名
    set altername=test
    set /a sum=0
    for %%m in (*.txt) do ( 
        if not "%%m"=="test.bat" (      
            echo %%m
            ren %%m %altername%%%m
            set /a sum=sum+1 )
    )
    
    echo 一共有%sum%个文件被改名
    set sum=
    set altername=

    注意:do和if语句的条件要和其后的“(”之间空一格而且必须在同一行,否则容易出现语法错误。

    2. 创建编号从0-99的100个文件

    @echo off
    echo 开始创建0-99共100个文件
    echo.
    echo.
    for %%n in (0,1,99) do (
        echo 文件%%n >> 文件%%n.txt
    )
    echo 创建完毕


    3. 自动循环运行某个程序

    @echo off
    echo “正在测试是否可ping通主机127.0.0.1”
    :again
    ping 127.0.0.1 > nul
    if NOT %errorlevel% == 0 ( goto again)
    start "可正常ping通" echo 可正常ping通 

    注意:if语句判断后的command 必须有一部分(半括号也算)与条件在同一行,否则会出现语法命令不正确。
    也可直接在同一行写完:if NOT %errorlevel% == 0 goto again


    4. 显示批处理的完整路径信息

    @echo off
    echo 当前运行的%0文件的完整路径为:
    echo %~dp0
    echo.

    注意:%0表示批处理文件名本身,~dp组合代表将指定的变量扩展到路径

    5. 将文件名自动更名为当前系统日期

    @echo off
    if not exist %1 ( echo ss:
    echo %0 filename
    echo filename:表示需要修改的文件名。
    echo.
    echo.
    goto end
    )
    set extension=%~x1
    for /F "tokens=1,2,3 delims=/- delims=/ " %%A in ('date /T') do (
        set date=%%A%%B%%C )
    ren %1  "%date%%extension%"
    
    echo.
    echo successed!
    set extension=
    set date=
    :end

    注意
    1. if后的(要跟command之间空一格,否则会出错。
    2. 这里的for语句,/F表示用文件解析过程处理。tokens用于定义for中变量的个数,delims用于定于字符串的分隔符。date /T 必须用单引号,否则会出错,它返回当前日期字符串如“2014-10-11 星期四”,所以要使用-和空格分割它。
    3.这里的for 条件 do 和后面的command 要不在同一行,要不就空格后紧跟(再分行。否则会出错。
    4. ren 改名前 改名后 这里的改名后是由2个变量引用所得,必须用双引号括起,否则会出现命令语法不正确的错误。

    6. 使用批处理命令自动接收用户输入的信息

    @echo off
    :repeat
    echo.
    echo.
    echo *************请选择你想要执行的操作*************
    echo -------1.输入数字1并按回车键,则显示当前日期-----
    echo -------2.输入数字2并按回车键,则显示当前时间-----
    echo -------3.输入数字3并按回车键,则显示文件列表-----
    echo -------4.输入其他任意字符并按回车键,则终止批处理-----
    echo.
    echo 请输入:
    set /p reply=
    if “%reply%”==“1” (
        echo 当前日期是:
        date /t
        pause
        goto repeat
    )
    if “%reply%”==“2” (
        echo 当前时间是:
        time /t
        pause
        goto repeat
    )
    if “%reply%”==“3” (
        echo 显示文件列表:
        dir /w
        pause
        goto repeat
    )
    echo.
    echo 你输入了%reply%字符,批处理程序自动退出
    pause

    注意
    1. 接收屏幕输入的语法:set /p reply=  记得要写=
    2. 判断时要先%变量%引用变量,再用双引号当做字符来进行判断

    7. 为批处理所在的文件夹自定义图标 

    @echo off
    if not exist shell32.dll (
        echo 图标文件不存在,无法完成任务
        goto end
    )
    
    rem desktop.ini是系统可识别的一个文件,作用是存储用户对文件夹的个性设置。
    if exist desktop.ini (
        rem 要先把desktop.ini设置为非隐藏(-h),才能进行删除
            attrib desktop.ini -h -s -a -r 
        del desktop.ini /a /f /q 
    
    )
    
    rem 下面对desktop.ini文件进行设置。
    echo [.ShellClassInfo] >desktop.ini
    echo IconFile=shell32.dll >>desktop.ini
    echo IconIndex=2 >>desktop.ini
    
    rem 隐藏desktop.ini和图标文件,避免误删
    attrib desktop.ini +h +s +r
    attrib tubiao.ico +h +s +r
    
    echo.
    echo 成功将当前文件夹的图标更改为tubiao.ico
    :end

    注意
    1. 开始我是用自己创建的图片(myself.ico)但是发现一直不成功。于是我右键文件夹,选择属性-自定义-文件夹图标,尝试使用我自己创建的图片更改图标,系统提示:它不包含图标。
    然后我发现系统用的图标是"C:WindowsSystem32shell32.dll",于是我就将它拷贝到批处理文件所在的文件夹使用了。当然,直接引用它的路径也是可以的。
    2. 在cmd.exe下执行该批处理文件后,需要等待一段时间才能看到批处理文件所在的文件夹图标被改变了。(开始我一直以为不成功,后来去看结果图标是改变了的,只是有延迟)

     
    8. 建立具有保护性的文件夹

    @echo off
    echo.
    echo 利用word文档及midi文档对应的classid创建文件夹
    md a.doc.{00020906-0000-0000-C000-000000000046}
    md a.mid.{00022603-0000-0000-C000-000000000046}
    echo.
    echo 已经成功创建2个文件夹
    echo.

    注意

    是创建了a.doc和a.mid这两个文件夹,但是双击后还是可以打开啊(教程的结果是:双击它们,并非直接打开文件夹,需要右键并选择“打开”选项才能打开),我暂时没有找到原因。

    9. 利用批处理程序为指定文件创建快捷方式

    @echo off
    if not exist %1 (
        echo 该批处理正确用法如下:
        echo %0 filename
        echo 参数filename表示要创建快捷方式的文件
        echo.
        echo 批处理无法创建快捷方式,因为没有指定文件
        goto end
    )
    
    echo 正在为指定的文件创建快捷方式...
    rem ~n表示取文件名
    set shortcutname=%~n1.url
    rem 将[InternetShortcut]写入文件,表示该文件是一个快捷方式文件
    echo [InternetShortcut] > %shortcutname%
    rem ~f表示取文件全称
    echo URL=%~f1 >> %shortcutname%
    echo IconIndex=1 >> %shortcutname%
    rem %windir%表示系统安装目录,它是系统默认的环境变量
    echo IconFile=%windir%system32shell32.dll >> %shortcutname%
    rem >nul表示将copy命令产生的信息发送到空设备,从而避免直接显示在命令行窗口
    copy %shortcutname% "D:" > nul
    echo.
    echo 成功创建%1 的快捷方式%shortcutname%,该快捷方式已经发送到桌面!
    set shortcutname=
    echo.
    :end

    注意
    如果出现批处理copy被访问拒绝:
    1. 方法一:在cmd下输入:icacls C: /grant accountname:perm
    其中perm是权限掩码,大概是F(完全访问权限),M(修改权限),RX(读取和执行),R(只读),W(只写)。
    但是输入icacls C: /grant accountname:f后,如果把copy快捷方式到C盘,还是会拒绝访问,但可以copy到D盘。具体什么原因还是搞不清。
    2. 方法二:切换系统账户到administrator或者使用管理员权限运行cmd,再执行脚本,这样什么权限都有了。

    10. 直接进入指定文件夹的命令行窗口

    @echo off
    echo Windows Registry Editor Version 5.00 >temp.reg
    echo 正在添加命令到文件夹快捷菜单..
    
    rem [HKEY_CLASSES_ROOTDirectoryshell
    unas]是regedit注册表的某个位置
    rem 若runas文件夹不存在即创建它,否则覆盖它
    echo [HKEY_CLASSES_ROOTDirectoryshell
    unas] >>temp.reg
    
    rem 选中文件夹后,按下shift在文件夹右击就会出现“在CMD窗口打开文件夹”这样的快捷菜单。
    rem &符号后面的字符作为快捷键,即弹出快捷菜单后按下ctrl+c即可执行该命令(不过可能会跟windows系统原有的快捷键相冲突)
    echo @="在&CMD窗口打开文件夹" >>temp.reg
    
    echo [HKEY_CLASSES_ROOTDirectoryshell
    unascommand] >>temp.reg
    rem pushd作用:保存当前目录以供 POPD 命令使用,然后改到指定的目录
    rem %号写入文件,需要使用%来转义它,否则写入失败(其他符合如"还是使用来进行转义) %1是cd命令的第一个参数-路径
    echo @="cmd.exe /s /k "cd %%1"" >>temp.reg
    rem 也可以这样写:echo @="cmd.exe /s /k pushd "%%V"" >>temp.reg
    echo 成功添加命令行窗口打开文件夹命令!
    echo.
    regedit /s temp.reg
    del /q /f temp.reg >nul   

    注意

    这个脚本纠结了很久才执行成功。

    1. 是%号的转义,查了很久才发现是用%号转义,而不是;

    2. 注册表文件的写入,由于当前的系统账户不是管理员,有时候会写入注册表失败。

    3. 教程中打开文件夹是这样写的:@=“cmd /k "cd %~pd1"”,我一直执行失败,百度过后才发现直接cd %1就可以了,不需要~pd,因为%1就是代表cd命令的第一个参数-路径!

    11.批处理程序中不同盘符路径的切换

    @echo off
    echo.
    echo 从当前盘符C:切换到另一个盘符D:目录下:
    pushd d:
    echo d:目录中包含以下文件夹:
    rem /ad表示只显示文件夹,/b表示以简洁方式显示文件夹,不显示标题信息与摘要
    dir /ad /b
    echo.
    echo 返回批处理运行时所在的目录
    popd

    注意
    1. pushd和popd是成对使用的。
    2. pushd命令执行时将当前路径保存到栈并切换到命令中指定的路径。而popd命令是将栈中的路径取出来并将当前路径设置为该路径。

  • 相关阅读:
    机器学习实践笔记3(树和随机森林)
    Cocos2d-x3.1回调函数具体解释
    base 64 编解码器
    HDU 4915 Parenthese sequence _(:зゝ∠)_ 哈哈
    跟我extjs5(03--在项目过程中加载文件)
    备份和还原数据库
    Android学习–Android app 语言切换功能
    Android app内语言环境切换
    Android学习–Android app 语言切换功能
    swift:自定义UICollectionViewFlowLayout
  • 原文地址:https://www.cnblogs.com/bangbangjiang/p/3979150.html
Copyright © 2011-2022 走看看