Board logo

标题: [求助]关于无法转换%programfiles%成真实目录的问题 [打印本页]

作者: IceCrack     时间: 2006-8-14 13:47    标题: [求助]关于无法转换%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


为什么没有转换成真实地址呢?
作者: IceCrack     时间: 2006-8-14 14:54
@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
作者: zts59     时间: 2006-8-14 16:20
变成“%programfiles%\xxxxxxxx”

路径中间有空格就要左右两边加引号的!
作者: IceCrack     时间: 2006-8-14 16:26
问题现在解决了
用了延迟变量
do ( set b=%%a
    set "b=!b:programfiles=%programfiles%!"
    set "b=!b:SystemDrive=%SystemDrive%!"
    set "b=!b:SystemRoot=%SystemRoot%!"

ps:楼上的。我用的有引号的
作者: namejm     时间: 2006-8-14 17:14


  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里的百分号全部去掉。
作者: namejm     时间: 2007-1-7 07:08
  找到一个不用启用变量延迟的方法,演示代码如下:
@echo off
for /f "delims=" %%i in (lmrj.txt) do call echo "%%i"
pause