询问者
批量压缩文件bat在 windos 2008R2.下无法运行

问题
-
下面这段批量压缩文件的批处处里在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%"
全部回复
-
從代碼看存放 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