2010-03-23 27 views
5

批處理文件以一個極度簡單的批處理文件:管理員的快捷與雙引號參數

echo hi 
pause 

保存,作爲test.bat的。現在,創建test.bat的快捷方式。該快捷方式運行批處理文件,打印「嗨」,然後等待按鍵按預期。現在,爲快捷方式的目標添加一些參數。現在您有快捷方式:

%path%\test.bat some args 

該快捷方式像以前一樣運行批處理文件。

現在,以管理員身份運行快捷方式。 (順便說一下,這是在Windows 7上)。您可以使用右鍵單擊 - >以管理員身份運行,或者轉到快捷方式的屬性並選中高級部分中的框。告訴UAC它沒關係,再次快捷方式按預期運行批處理文件。

現在,更改的參數在快捷方式的目標增添雙引號:

%path%\test.bat "some args" 

現在嘗試快捷的管理員。這次不行!命令窗口彈出並消失得太快而看不到任何錯誤。我嘗試在快捷方式中添加> test.log 2> & 1,但在這種情況下沒有創建日誌。

嘗試運行相同的快捷方式(使用雙引號),但不能以管理員身份運行。它運行良好的批處理文件。所以,看起來行爲並不是因爲雙引號參數,而是因爲它以管理員身份運行。這是兩個奇怪的組合。

我也嘗試從管理員的命令窗口運行相同的命令。這如預期的那樣運行批處理文件而沒有錯誤。從命令窗口運行快捷方式產生了一個新的命令窗口,該窗口閃爍並消失。顯然這個問題是由管理員,快捷方式和雙引號的組合引起的。

我完全被難住了,有沒有人有任何想法發生了什麼?我也想要一個解決方法。

+0

當您在命令行上運行實際命令時,該怎麼辦? '%path%\ test.bat「一些參數」'。你看見什麼了? – ghostdog74 2010-03-23 07:19:07

+0

當從命令行運行時,批處理文件打印出「hi」,然後等待按鍵,如您所料。 – XXB 2010-03-23 16:17:31

回答

5

我只是跑在這個進程監視器,這裏是我所看到的:

作爲用戶運行:

cmd /c ""C:\Users\Sunbelt\Desktop\test.bat" "some args""

以管理員身份運行:

"C:\Windows\System32\cmd.exe" /C "C:\Users\Sunbelt\Desktop\test.bat" "some args"

出於某種原因,運行因爲管理員案例沒有引用整個命令。現在看來,這是試圖運行命令:

C:\Users\Sunbelt\Desktop\test.bat" "some args

我猜想,因爲第一空間是引用它實際上試圖運行以下命令:

"C:\Users\Sunbelt\Desktop\test.bat some" args

,而在過程監控記錄有「C:\ Users \ Sunbelt \ Desktop \ test.bat some」的文件系統條目爲「NO SUCH FILE」。當我以管理員身份運行時,我不知道它爲什麼會有所不同,但這似乎正在發生。

+0

很好的信息,但我很想有一些工作...... – XXB 2010-03-23 16:30:53

+0

我無法弄清楚如何做到這一點。我嘗試在各種地方添加引號,但是快捷方式對話框不會接受該輸入或導致相同的「無此類文件」訪問。 – Luke 2010-03-23 18:27:15

3

要解決這個問題,沒有空間創建一個路徑上的其它bat文件,並與不帶空格的文件名,簡單地做到這一點:

call "Long path to original bat file\Original bat file.bat" 

這種二次bat文件可以以管理員身份運行。

您現在可以創建一個快捷方式到該輔助bat文件並在快捷方式的高級選項中檢查以admin身份運行。該快捷方式可以放置在具有空格的路徑上,並且可以具有包含空格的文件名。

0

在我的情況下,我只想傳遞一個文件名作爲參數,但路徑中有空格。

我發現了一個適用於這種情況的解決方案(如果可以截斷文件名)。

使用CALL.exe的語法創建另一個bat文件(input_gate.bat)以刪除路徑中的空格。 假設快捷方式命名爲test.lnk,並作爲input_gate.bat同一航線上:

call %~sdp0test.lnk %~sf1 

這作爲參數傳遞給TEST.BAT完整的文件名短格式,具有管理員權限。

  • %〜sdp0 - >當前路徑(對於input_gate.bat)爲短格式。
  • %〜SF1 - >傳遞給input_gate.bat(在我的情況的完整文件名用空格)的第一個參數
0

這在Windows 7中工作對我來說:

ShortcutTarget: C:\Windows\System32\cmd.exe /C myscript.bat Param1 "Param Two with spaces" 
StartIn:  "C:\Path containing\my script" 

沒試過它尚未作爲管理員。我不認爲它會工作,如果myscript.bat包含空格

0

我終於弄明白了,在一種允許使用長文件名(短文件名不足以用於我的用例)的方式。我的解決方案在Win 7,8和10上運行。我認爲這受到了盧克提到的缺失的雙引號的啓發。

這就是:

1)對於創建批處理文件快捷方式,其中設置爲管理員身份運行,請使用以下命令行:

cmd /s /c ""path_to_batch_file" 

注意,有在命令開始處是2個雙引號字符,並且在末尾處僅有1個,即使應該通常也在末尾2。但這是讓它工作的訣竅!

2)在批處理文件中,重新添加缺少的雙引號字符:

set user_file=%1" 


這就是它!下面是一個例子,讓你看到它的行動:

1)在您的桌面上,創建「測試。蝙蝠」具有以下內容:

@echo off 
set user_file=%1" 
echo The file is: %user_file% 
pause 

3)創建一個快捷方式到批處理文件將其設置爲管理員身份運行,並給它下面的命令行:

cmd /s /c ""%userprofile%\desktop\test.bat" 

4)將文件拖放到快捷成功(我希望...)