[英]Show file properites dialog programatically or from command line in windows
資源管理器,右鍵單擊單個文件,屬性...
顯示文件屬性對話框。
我希望有一種直接的方法可以從命令行執行此操作,這說明了我對如何使用win api完全缺乏研究:)
回答我自己的問題。 我從提供的鏈接中整理了這個腳本。 可能有更直接的方法-這具有像科學怪人般的光環,但它確實有效。 缺點是存在一種使對話框保持打開狀態(使腳本處於休眠狀態)的黑客,可以將其更改為兩種不同的方法。 該腳本將執行任何動詞,並列出動詞。
用法:將腳本另存為shareGUI.js,使用cscript shareGUI.js <args>
調用cscript shareGUI.js <args>
例子:
cscript shareGUI.js C:\\path\\to\\file.txt
將列出動詞
cscript shareGUI.js <verb> C:\\path\\to\\file.txt
將執行給定動詞
cscript shareGUI.js "Properties" C:\\path\\to\\file.txt
將顯示屬性對話框
以黑體字包含通常的免責聲明。
var args = WScript.Arguments;
var usage="Usage: cscript shareGUI.js [verb] <fullpath>";
useage+="\n Function: Executes given verb on given file";
useage+="\n or lists available verbs";
useage+="\n Notes: Ampersands in property names are remove in listing";
useage+="\n Ampersands are not required when specifying verb";
useage+="\n Arguments: ";
useage+="\n verb (optional): Name of verb to be executed, case sensative";
useage+="\n if not provided, verbs are listed";
useage+="\n fullpath: FULLPATH Name of file or directory";
//
if ((args.Unnamed.length == 0) || (args.Named.Exists("?"))) {
QuitMsg(usage,0);
}
if (args.Unnamed.length > 2) {
QuitMsg(usage,0);
}
//
var tgt_;
var verb_;
if (args.Unnamed.length == 1) {
tgt_=args.Unnamed.Item(0);
verb_ = "";
}else if (args.Unnamed.length == 2) {
verb_ = args.Unnamed.Item(0);
tgt_=args.Unnamed.Item(1);
}
//
var shellApp = new ActiveXObject("Shell.Application");
QuitIfNull(shellApp,"System Error:Could not get Shell.Application ActiveXObject",2);
//
var objFSO = new ActiveXObject("Scripting.FileSystemObject");
QuitIfNull(objFSO,"System Error:Could not get Scripting.FileSystemObject ActiveXObject",2);
//
var WSHshell = new ActiveXObject("Wscript.Shell");
QuitIfNull(WSHshell,"System Error:Could not get Wscript.Shell ActiveXObject",2);
//
var doList=verb_=="";
//
var isDir=objFSO.FolderExists(tgt_);
if (isDir) {
DoForFolder();
}else{
DoForFile();
}
WScript.Quit(0);// EXIT OK
// functions...
// redundant code prequel
function DoForFile(){
var objFile = objFSO.GetFile(tgt_);
QuitIfNull(objFile,"Error:Path \""+tgt_+"\" Not Found",3);
//
var folder = shellApp.NameSpace(objFSO.GetParentFolderName(objFile));
QuitIfNull(folder,"System Error:Could not get parent folder name of \""+tgt_+"\"",3);
//
var folderItem=folderItemFromFolder(tgt_,folder);
QuitIfNull(folderItem,"System Error:Could not folder item from parent folder of \""+tgt_+"\"",3);
//
if (doList) {
listItemVerbs(folderItem);
return;
}
var folderItemVerb=folderItemVerbFromFileItem(verb_,folderItem);
QuitIfNull(folderItemVerb,"System Error:Could not folder item verb from folder item \""+tgt_+"\"",3);
//
runTheVerb(folderItemVerb);
}
// redundant code redux
function DoForFolder(){
var folder = shellApp.NameSpace(tgt_);
QuitIfNull(folder,"System Error:Could not folder of \""+tgt_+"\"",2);
//
var folderItem=folder.Self;
QuitIfNull(folderItem,"System Error:Could not folder item of \""+tgt_+"\"",2);
//
if (doList) {
listItemVerbs(folderItem);
return;
}
var folderItemVerb=folderItemVerbFromFileItem(verb_,folderItem);
QuitIfNull(folderItemVerb,"System Error:Could not folder item verb from folder item \""+tgt_+"\"",3);
//
runTheVerb(folderItemVerb);
}
// HACK!! this part sucks, have to remain open else dialog dies
function runTheVerb(verb){
verb.DoIt();
WSH.Sleep(5000);
var focus_way=false;
if (focus_way) {
while (WSHshell.AppActivate("Properties")) {WSH.Sleep(2000)};
}else{ // forever way
WSH.Sleep(60*60*1000);// sleep for 60 minutes !
}
}
// match path and return folder item
function folderItemFromFolder(path,folder){
var folderItems = new Enumerator(folder.Items());
for (; ! folderItems.atEnd(); folderItems.moveNext()) {
var folderItem = folderItems.item();
if (folderItem.Path==tgt_) {
//WScript.Echo("tgt_:"+folderItem.Path);
//WScript.Quit(0);
return folderItem
}
}
return null;
}
// match verb name
function folderItemVerbFromFileItem(verb,folderItem){
verb=verb.replace('&','');
var folderItemVerbs = new Enumerator(folderItem.Verbs());
for (; ! folderItemVerbs.atEnd(); folderItemVerbs.moveNext()) {
var folderItemVerb = folderItemVerbs.item();
//WScript.echo("Verb:"+folderItemVerb );
var fix_n=folderItemVerb.Name.replace('&','');
if (fix_n == verb) {
return folderItemVerb;
}
}
return null;
}
// echo the verbs, ignore blanks, remove ampersands
function listItemVerbs(folderItem){
var folderItemVerbs = new Enumerator(folderItem.Verbs());
for (; ! folderItemVerbs.atEnd(); folderItemVerbs.moveNext()) {
var folderItemVerb = folderItemVerbs.item();
var fix_n=folderItemVerb.Name.replace('&','');
if (fix_n!="") {
WScript.echo(""+fix_n );
}
}
}
function QuitIfNull(who,why,how){
if (who==null) {
QuitMsg(why,how);
}
}
function QuitMsg(why,how){
WScript.Echo(why);
WScript.Quit(how);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.