none
批量压缩文件bat在 windos 2008R2.下无法运行 RRS feed

  • 问题

  • 下面这段批量压缩文件的批处处里在XP系统下可以成功运行,但是在windows server2008 r2 下则无法运行。求解决办法,谢谢!

    @echo off 
    title MB
    color 0a
    rem *********************************************************
    rem 在注册表中读取winrar的安装目录
    rem 如果已经存在临时文件,把它删除
    if EXIST tmp.MB del tmp.MB
    rem 查询注册表中的winrar的路径值,并把它发送到临时文件中
    reg query "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\WinRAR.exe" /v path>>tmp.MB
    rem 用For命令从临时文件中读取winrar的路径值,并把它保存到变量 WinRAR 中
    for /f "tokens=1,2,* skip=4 delims= " %%j in ('more tmp.MB') do set WinRAR=%%l
    rem 如果已经存在临时文件,把它删除
    if EXIST tmp.MB del tmp.MB
    rem ********************************************************* rem 用dir命令列出当前目录下的所有目录
    rem 并把它发送到for循环中,然后在for循环中调用压缩的子过程
    for /f "delims=" %%i in ('dir /ad /b') do call :ss "%%i"
    cls

    exit
    :ss
    set "var=%~1"
    rem 即 rar a -r 压缩后的文件名.rar 目录名
    "%WinRAR%\rar" a -r "%var%".rar "%var%"

    2013年8月18日 7:45

全部回复

  • 從代碼看存放 tmp.MB 臨時文件的當前路徑不明確, 可能為 %windir%\system32, 如果通過在代碼中增加 echo %cd% > %temp%\curdir.tmp 確認, 那麼由於非 Server Core 的系統默認啟用了 UAC, 並且執行該任務的管理員要求 UAC 提升權限, 那麼這會因為權限不足導致臨時文件無法生成, 導致執行失敗.

    對此你

    1. 可以通過 cd /d path 指定路徑, 或者為臨時文件提供絕對路徑.

    2. 或者通過在執行批處理後跟 2> %temp%\err.log 查看具體的錯誤信息, 然後再進行修改.

    此外我個人覺得沒有必要多次執行 if EXIST tmp.MB del tmp.MB  , 只要該文件可以進行讀寫操作, 沒有設置不適當的 ACE, 或者屬性. 那麼執行像

    reg query "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\WinRAR.exe" /v path > %temp%\tmp.MB 

    這樣的命令, 是可以通過 > 重定向符將上次的內容覆蓋掉.

    擔心不能寫入的話, 可以在覆蓋之前加一條命令

    attrib %temp%\tmp.MB -r -s -h


    Folding@Home

    2013年8月18日 10:15
  • 另外你可以考慮用 7z 替代 WinRAR. 一可以不用考慮購買授權, 二只需要將 7z.exe, 7z.dll 放置到指定目錄即可以調用, 不需要管理員權限.

    Folding@Home

    2013年8月18日 10:19
  • 你好!能不能按照您的建议,把完整的代码写出来呢?。因为我是初学者,谢谢!
    2013年8月18日 14:30
  • 微软能不能给个官方回复??
    2013年8月24日 3:37