我正在编写一个批处理文件,用于在 Google Chrome 中以全屏模式打开 Netflix。不过,我对批处理文件的了解还很浅薄……
chrome.exe --start-fullscreen --app=https://www.netflix.com
这当然在从与 chrome 可执行文件相同的目录运行时有效,但在其他任何地方都无效。
我正在寻找一种方法来编写批处理文件来搜索和定位 chrome.exe,然后使用上述开关执行它。这样我就可以与其他人共享批处理文件,并且无论他们的文件路径如何,它都可以正常工作。可以做到吗?
- 编辑 -
由于 Appleoddity 表明搜索是不必要的,那么这是否是为此目的编写批处理文件的最佳方法?:
@echo off
cd\program files (x86)\google\chrome\application
chrome.exe --start-fullscreen --app=https://www.netflix.com
答案1
因为人们可能会将程序文件放在 C 盘以外的奇数驱动器上(不常见但有可能),所以最好使用程序文件文件夹的系统变量。此外,由于它可能位于本地应用程序数据文件夹中,我们也应该在那里检查。
rem :: set file location
if exist %localappdata%\google\chrome\application\chrome.exe (
set chrome_exe="%localappdata%\google\chrome\application\chrome.exe"
)
if exist %PROGRAMFILES(x86)%\google\chrome\application\chrome.exe (
set chrome_exe="%PROGRAMFILES(x86)%\google\chrome\application\chrome.exe"
)
if exist %PROGRAMFILES%\google\chrome\application\chrome.exe (
set chrome_exe="%PROGRAMFILES%\google\chrome\application\chrome.exe"
)
rem :: run chrome
%chrome_exe% --start-fullscreen --app=https://www.netflix.com
答案2
我写了一些有用的东西。如果没有阿德莱德爵士的帖子,我不可能做到这一点。所以,感谢阿德莱德爵士,谢谢你的榜样。也感谢所有做出贡献的人;它很有教育意义 :)
(我选择批处理而不是 powershell 是因为任何我想与之共享 powershell 脚本的人首先都必须更改他们的执行策略设置。而批处理则不需要这样做。)
if exist "%localappdata%\google\chrome\application\chrome.exe" set file_found="yes"
if not exist "%localappdata%\google\chrome\application\chrome.exe" set file_found="no"
if %file_found%=="yes" set chrome_exe="%localappdata%\google\chrome\application\chrome.exe"
if exist "%programfiles%\google\chrome\application\chrome.exe" set file_found="yes"
if not exist "%programfiles%\google\chrome\application\chrome.exe" set file_found="no"
if %file_found%=="yes" set chrome_exe="%programfiles%\google\chrome\application\chrome.exe"
if exist "%programfiles(x86)%\google\chrome\application\chrome.exe" set file_found="yes"
if not exist "%programfiles(x86)%\google\chrome\application\chrome.exe" set file_found="no"
if %file_found%=="yes" set chrome_exe="%programfiles(x86)%\google\chrome\application\chrome.exe"
%chrome_exe% --start-fullscreen --app=https://www.netflix.com
答案3
我绝对建议转换为电源外壳(在我看来,这更容易)并且有大量的 cmd-let 来帮助解决这类事情。
在本例中,我们假设 Google Chrome 有 2 个安装路径,因此这是我们需要考虑的主要变量。使用测试路径选项我们可以为潜在选项指定 2 个 UNC 路径。
下面是一个使用“Test-Path”的脚本,我们可以测试 Program Files (x86) 中是否存在 Google Chrome,如果不存在,我们就分配 LocalAppData 的值。
这里是:
$ConfirmGoogleChrome = (Test-Path "C:\Program Files (x86)\Google\Chrome\Application\chrome.exe")
$Process = "C:\Program Files (x86)\Google\Chrome\Application\chrome.exe"
function OpenChromeFullScreen {
If ($ConfirmGoogleChrome -eq $True) {
start $Process --start-fullscreen --app="https://www.netflix.com"
}
else {
$Process = "%localappdata%\google\chrome\application\chrome.exe"
start $Process --start-fullscreen --app="https://www.netflix.com"
}
}
OpenChromeFullScreen
请注意,Windows Vista(我相信)及更高版本中默认启用了 PowerShell,并且需要 Net Framework 才能运行 - 应在最多现代操作系统安装。
更新
由于有评论称这可能不像要求的那样强大(因为我们不能假设C:\
是操作系统的安装路径),我做了一些“改进”:
# Variables for the HomeDrive (OS Install Path)
# Inclusive of the path to AppData
$OSInstallPath = $env:HOMEDRIVE
$OSLocalAppData = $env:LOCALAPPDATA
# Performs Checks on the end path
$ChromeProgramFiles = (Test-Path "C:\Program Files (x86)\Google\Chrome\Application\chrome.exe")
$ChromeLocalAppData = (Test-Path "$OSLocalAppData\google\chrome\application\chrome.exe")
# Variable for Google Chrome Path
# We default this to Program Files
$GoogleChrome = "C:\Program Files (x86)\Google\Chrome\Application\chrome.exe"
# Function to set the paths
Function ConfirmSetPaths {
If ($ChromeProgramFiles -eq $False) {
$GoogleChrome = "$OSLocalAppData\google\chrome\application\chrome.exe"
}
}
ConfirmSetPaths
Start "$GoogleChrome" --start-fullscreen --app="https://www.netflix.com"
本质上,我们为您电脑上的安装路径创建了变量(“ $OSInstappPath
”和“ $OSLocalAppData
”,它们是系统链接变量)(因为 UNC 路径可能会根据运行它的人员而改变)。
然后我们为可能存在的两个路径创建另外 2 个变量chrome.exe
。该函数ConfirmSetPaths
将测试chrome.exe
PC 上的“默认”路径是否存在(在本例中我们使用“ C:\Program Files (x86)\Google\Chrome\Application\chrome.exe
”)。
如果此处存在,则启动该程序。如果不存在,则将变量更改为$GoogleChrome
本地应用程序数据文件夹,然后从此处执行。
变化:
- 现在使用
$env
变量来指示操作系统安装路径;