中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [求助]关于无法转换%programfiles%成真实目录的问题
作者:
标题: [求助]关于无法转换%programfiles%成真实目录的问题 上一主题 | 下一主题
IceCrack
中级用户

DOS之友


积分 332
发帖 168
注册 2005-10-6
来自 天涯
状态 离线
『楼 主』:  [求助]关于无法转换%programfiles%成真实目录的问题

这个是我的lmrj.txt里面的东西
%ProgramFiles%\Dudu
%SystemDrive%\NetBar
%ProgramFiles%\3721
%SystemRoot%\System32\Drivers\CnsminKP.sys
%ProgramFiles%\360so
%ProgramFiles%\AD4All
%ProgramFiles%\Baidu
%ProgramFiles%\baigoo
%ProgramFiles%\CNet
%ProgramFiles%\CNNIC
%ProgramFiles%\CoolWebsite
%ProgramFiles%\CaiShow Tech



下面的是我的批处理文件
for /f "delims=" %%a in (lmrj.txt) do (@md "%%a" >nul 2>nul&&@setacl "%%a" /dir /deny everyone /full /p:no_dont_copy >nul 2>nul&&attrib +s +h "%%a")
本来我的意图是在%programfiles%的真实路径中建文件夹的.
但是现在是在当前目录下建一个以%programfiles%的文件夹,里面再有一个dudu


为什么没有转换成真实地址呢?



测试环境: windows xp pro sp2    高手是这样炼成的:C:\WINDOWS\Help\ntcmds.chm
2006-8-14 13:47
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (369525996)  编辑帖子  回复  引用回复
IceCrack
中级用户

DOS之友


积分 332
发帖 168
注册 2005-10-6
来自 天涯
状态 离线
『第 2 楼』:  

@goto start
==============================================================
名称:流氓软件免疫程序
功能:阻止流氓软件进入系统
原理:设置文件夹的访问权限列表(ACL),由于FAT32的格式没有(ACL)
      所以此文件只能在NTFS格式下才能使用.FAT32格式的用户若想使用此文件
      须把系统先转换成NTFS格式,具体命令convent(欲转分区)/fs:ntfs
作者: IceCrack http://icecrack.ys168.com
日期: 2006-8-14 12:10:16 Monday      
==============================================================
:start
@echo off
color 0e
title 流氓软件免疫程序
setlocal enabledelayedexpansion
set choice=
echo.
echo.
echo                   请输入以下选项前面的数字
echo.
echo                   1:   安装流氓软件免疫程序
echo                   2:   删除流氓软件免费程序
echo                   3:   查看技术信息
echo                   4:   退出
echo.
echo.
set /p choice=                 输入你的选择:
echo.
if "%choice%"=="1" goto install
if "%choice%"=="2" goto unin
if "%choice%"=="3" goto view
if "%choice%"=="4" goto quit
cls
goto start
:view
cls
echo ===========================================================================
echo.
echo.
echo                       欢迎使用流氓软件免疫程序
echo                                                      IceCrack
echo.
echo     功能:
echo          本软件通过访问控制列表(ACL)来免疫一些当前的流氓软件,
echo.
echo     注意:
echo          本程序只能在NTFS系统下才能使用,因为FAT32系统是没有ACL的
echo          若真要使用本软件可以先把系统转换成NTFS格式.
echo          具体命令convert "欲转分区" /fs:ntfs
echo          (注: 一是没有引号,二是分区后面要有一个: 如"c:")            
echo ============================================================================
echo.
echo  按任意键,返回操作
pause >nul 2>nul
cls
goto start
:install
for /f "delims=" %%a in (lmrj.txt) do (@set b=%%a&&md "!b!" >nul 2>nul&&@setacl "!b!" /dir /deny everyone /full /p:no_dont_copy >nul 2>nul&&attrib +s +h "!b!" )
goto finished
:unin
for /f "delims=" %%a in (lmrj.txt) do (@set b=%%a&&md "!b!" >nul 2>nul&&setacl "!b!" /dir /grant everyone /full /p:yes >nul 2>nul&&@rd  /q "!b!" >nul 2>nul)
goto finished

:finished
echo 操作完成
echo.
echo.
echo        按任意键退出
pause >nul 2>nul
:quit
endlocal
exit



测试环境: windows xp pro sp2    高手是这样炼成的:C:\WINDOWS\Help\ntcmds.chm
2006-8-14 14:54
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (369525996)  编辑帖子  回复  引用回复
zts59
中级用户




积分 387
发帖 104
注册 2004-11-19
状态 离线
『第 3 楼』:  

变成“%programfiles%\xxxxxxxx”

路径中间有空格就要左右两边加引号的!

2006-8-14 16:20
查看资料  发短消息 网志   编辑帖子  回复  引用回复
IceCrack
中级用户

DOS之友


积分 332
发帖 168
注册 2005-10-6
来自 天涯
状态 离线
『第 4 楼』:  

问题现在解决了
用了延迟变量
do ( set b=%%a
    set "b=!b:programfiles=%programfiles%!"
    set "b=!b:SystemDrive=%SystemDrive%!"
    set "b=!b:SystemRoot=%SystemRoot%!"

ps:楼上的。我用的有引号的



测试环境: windows xp pro sp2    高手是这样炼成的:C:\WINDOWS\Help\ntcmds.chm
2006-8-14 16:26
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (369525996)  编辑帖子  回复  引用回复
namejm
荣誉版主

batch fan


积分 5226
发帖 1737
注册 2006-3-10
来自 成都
状态 离线
『第 5 楼』:  



  Quote:
Originally posted by IceCrack at 2006-8-14 16:26:
问题现在解决了
用了延迟变量
do ( set b=%%a
    set "b=!b:programfiles=%programfiles%!"
    set "b=!b:SystemDrive=%SystemDrive%!"
    set "b=!b:SystemRoot ...

  应该叫变量延迟,呵呵。用这段代码的前提是把lmrj.txt里的百分号全部去掉。



尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。
2006-8-14 17:14
查看资料  发短消息 网志   编辑帖子  回复  引用回复
namejm
荣誉版主

batch fan


积分 5226
发帖 1737
注册 2006-3-10
来自 成都
状态 离线
『第 6 楼』:  

  找到一个不用启用变量延迟的方法,演示代码如下:
@echo off
for /f "delims=" %%i in (lmrj.txt) do call echo "%%i"
pause




尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。
2007-1-7 07:08
查看资料  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: