批处理程序在文件,文件夹管理中的应用

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

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

 

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:\Windows\System32\shell32.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%\system32\shell32.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_ROOT\Directory\shell\runas]是regedit注册表的某个位置
rem 若runas文件夹不存在即创建它,否则覆盖它
echo [HKEY_CLASSES_ROOT\Directory\shell\runas] >>temp.reg

rem 选中文件夹后,按下shift在文件夹右击就会出现“在CMD窗口打开文件夹”这样的快捷菜单。
rem &符号后面的字符作为快捷键,即弹出快捷菜单后按下ctrl+c即可执行该命令(不过可能会跟windows系统原有的快捷键相冲突)
echo @="在&CMD窗口打开文件夹" >>temp.reg

echo [HKEY_CLASSES_ROOT\Directory\shell\runas\command] >>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命令是将栈中的路径取出来并将当前路径设置为该路径。

 

posted @ 2014-10-23 16:50  邦邦酱好  阅读(678)  评论(0编辑  收藏  举报