中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-08-03 00:46
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [求助]关于无法转换%programfiles%成真实目录的问题 查看 1,161 回复 5
楼 主 [求助]关于无法转换%programfiles%成真实目录的问题 发表于 2006-08-14 13:47 ·  中国 辽宁 大连 教育网
中级用户
★★
DOS之友
积分 332
发帖 168
注册 2005-10-06 00:00
20年会员
UID 43171
性别 男
来自 天涯
状态 离线
这个是我的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
2 发表于 2006-08-14 14:54 ·  中国 辽宁 大连 教育网
中级用户
★★
DOS之友
积分 332
发帖 168
注册 2005-10-06 00:00
20年会员
UID 43171
性别 男
来自 天涯
状态 离线
@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
3 发表于 2006-08-14 16:20 ·  中国 广东 东莞 电信
中级用户
★★
积分 387
发帖 104
注册 2004-11-19 00:00
21年会员
UID 33813
性别 男
状态 离线
变成“%programfiles%\xxxxxxxx”

路径中间有空格就要左右两边加引号的!
4 发表于 2006-08-14 16:26 ·  中国 辽宁 大连 教育网
中级用户
★★
DOS之友
积分 332
发帖 168
注册 2005-10-06 00:00
20年会员
UID 43171
性别 男
来自 天涯
状态 离线
问题现在解决了
用了延迟变量
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
5 发表于 2006-08-14 17:14 ·  中国 四川 成都 鹏博士宽带
荣誉版主
★★★★
batch fan
积分 5,226
发帖 1,737
注册 2006-03-10 00:38
20年会员
UID 51697
来自 成都
状态 离线
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没商量。
考虑问题复杂化,解决问题简洁化。
6 发表于 2007-01-07 07:08 ·  中国 广东 电信
荣誉版主
★★★★
batch fan
积分 5,226
发帖 1,737
注册 2006-03-10 00:38
20年会员
UID 51697
来自 成都
状态 离线
  找到一个不用启用变量延迟的方法,演示代码如下:

@echo off
for /f "delims=" %%i in (lmrj.txt) do call echo "%%i"
pause
尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。
论坛跳转: