如何将pdf的文件路径动态附加到批处理脚本
How to dynamically attach the filepath of pdf to the batch script
我在使用旧版 Microsoft Edge 时遇到问题,现在我无法用它打开 pdf 文件。虽然有较新的版本可用,但我不太喜欢较新的 version.Yesterday 我了解到我可以使用 Microsoft Edge 通过命令行打开 pdf 文件,但我不知道如何 动态地 当我选择用我的批处理脚本打开 pdf 时,将 pdf 的文件路径附加到我的批处理脚本。
start shell:AppsFolder\Microsoft.MicrosoftEdge_8wekyb3d8bbwe!MicrosoftEdge file:\\d:\xxx.pdf
打开一个command prompt,运行 call /?
,仔细完整地阅读输出帮助。它解释了如何从批处理文件中引用批处理文件参数。参数 0 始终是批处理文件本身。
您的批处理文件可以编码为:
@echo off
setlocal EnableExtensions DisableDelayedExpansion
set "FileName=%~1"
if not defined FileName goto PrintHelp
set "FileName=%FileName:"=%"
if not defined FileName goto PrintHelp
if "%FileName%" == "/?" goto PrintHelp
set "FileName=%FileName:/=\%"
if not exist "%FileName%" (
echo ERROR: File not found: "%FileName%"
echo/
pause
goto EndBatch
)
set "FileName=%FileName:\=/%"
if not "%FileName:~0,1%" == "/" set "FileName=///%FileName%"
start "" shell:AppsFolder\Microsoft.MicrosoftEdge_8wekyb3d8bbwe!MicrosoftEdge "file:%FileName%"
goto EndBatch
:PrintHelp
echo INFO: %~nx0 must be called with name of a file to open in Microsoft Edge.
echo/
pause
:EndBatch
endlocal
我真的不明白为什么需要批处理文件才能在 Microsoft Edge 中打开 PDF 文件。也可以简单地将文件扩展名 .pdf
与 Microsoft Edge 相关联,以获得默认情况下使用 Microsoft Edge 打开的 PDF 文件。
可以在命令提示符 window 中执行以下命令行,以显示当前与文件扩展名 .pdf
关联的应用程序以及用于打开带有 [=] 的 PDF 文件的命令15=] 是文件名的占位符:
for /F "skip=1 tokens=2*" %I in ('%SystemRoot%\System32\reg.exe query HKEY_CLASSES_ROOT\.pdf /ve 2^>nul') do %SystemRoot%\System32\reg.exe query "HKEY_CLASSES_ROOT\%J\Shell\Open\Command" /ve
要了解批处理文件中使用的命令及其工作原理,请打开 command prompt window,在其中执行以下命令,并仔细阅读每个命令显示的所有帮助页面.
echo /?
endlocal /?
goto /?
if /?
pause /?
set /?
setlocal /?
start /?
另请参阅有关 file URI scheme. It would be necessary to percent encode 100% 正确文件 URL 的文件名的维基百科文章,但 Microsoft Edge 也支持不正确的编码文件 URLs,例如包含space 字符而不是 %20
或变音符 ä
而不是 %c3%a4
.
我假设您可以打开与 batch-file, with the assistance of powershell:
位于同一目录中的 pdf
@Echo Off & SetLocal EnableExtensions DisableDelayedExpansion
Set "filename=myfile! - 100%% virus free.pdf"
%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe -NoProfile -NoLogo -Command "[System.Diagnostics.Process]::Start(\"msedge\",\"`\"%~dp0%filename%`\"\")"
您可以在行 2
、 上用您自己的示例文件名替换我的示例文件名(特别注意不要触及结束双引号)。请注意,我故意使用 myfile! - 100%% virus free.pdf
文件名来向您表明,您 必须 将文件名中的任何百分比字符加倍,(作为百分比字符在批处理文件中使用时需要特殊处理).
事实上,我在查看一些 dos 文档后得到了答案。下面是我的解决方案(可用于使用 'open with' 此批处理脚本打开 pdf。为了避免打开 cmd window(我认为这很丑陋),我还使用 bat2exe 转换器将其转换为 exe .
@echo off
set prefix=file:///
set filepath=%~f1
set truepath=%filepath%%filepath:\=/%
start shell:AppsFolder\Microsoft.MicrosoftEdge_8wekyb3d8bbwe!MicrosoftEdge %truepath%
我在使用旧版 Microsoft Edge 时遇到问题,现在我无法用它打开 pdf 文件。虽然有较新的版本可用,但我不太喜欢较新的 version.Yesterday 我了解到我可以使用 Microsoft Edge 通过命令行打开 pdf 文件,但我不知道如何 动态地 当我选择用我的批处理脚本打开 pdf 时,将 pdf 的文件路径附加到我的批处理脚本。
start shell:AppsFolder\Microsoft.MicrosoftEdge_8wekyb3d8bbwe!MicrosoftEdge file:\\d:\xxx.pdf
打开一个command prompt,运行 call /?
,仔细完整地阅读输出帮助。它解释了如何从批处理文件中引用批处理文件参数。参数 0 始终是批处理文件本身。
您的批处理文件可以编码为:
@echo off
setlocal EnableExtensions DisableDelayedExpansion
set "FileName=%~1"
if not defined FileName goto PrintHelp
set "FileName=%FileName:"=%"
if not defined FileName goto PrintHelp
if "%FileName%" == "/?" goto PrintHelp
set "FileName=%FileName:/=\%"
if not exist "%FileName%" (
echo ERROR: File not found: "%FileName%"
echo/
pause
goto EndBatch
)
set "FileName=%FileName:\=/%"
if not "%FileName:~0,1%" == "/" set "FileName=///%FileName%"
start "" shell:AppsFolder\Microsoft.MicrosoftEdge_8wekyb3d8bbwe!MicrosoftEdge "file:%FileName%"
goto EndBatch
:PrintHelp
echo INFO: %~nx0 must be called with name of a file to open in Microsoft Edge.
echo/
pause
:EndBatch
endlocal
我真的不明白为什么需要批处理文件才能在 Microsoft Edge 中打开 PDF 文件。也可以简单地将文件扩展名 .pdf
与 Microsoft Edge 相关联,以获得默认情况下使用 Microsoft Edge 打开的 PDF 文件。
可以在命令提示符 window 中执行以下命令行,以显示当前与文件扩展名 .pdf
关联的应用程序以及用于打开带有 [=] 的 PDF 文件的命令15=] 是文件名的占位符:
for /F "skip=1 tokens=2*" %I in ('%SystemRoot%\System32\reg.exe query HKEY_CLASSES_ROOT\.pdf /ve 2^>nul') do %SystemRoot%\System32\reg.exe query "HKEY_CLASSES_ROOT\%J\Shell\Open\Command" /ve
要了解批处理文件中使用的命令及其工作原理,请打开 command prompt window,在其中执行以下命令,并仔细阅读每个命令显示的所有帮助页面.
echo /?
endlocal /?
goto /?
if /?
pause /?
set /?
setlocal /?
start /?
另请参阅有关 file URI scheme. It would be necessary to percent encode 100% 正确文件 URL 的文件名的维基百科文章,但 Microsoft Edge 也支持不正确的编码文件 URLs,例如包含space 字符而不是 %20
或变音符 ä
而不是 %c3%a4
.
我假设您可以打开与 batch-file, with the assistance of powershell:
位于同一目录中的 pdf@Echo Off & SetLocal EnableExtensions DisableDelayedExpansion
Set "filename=myfile! - 100%% virus free.pdf"
%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe -NoProfile -NoLogo -Command "[System.Diagnostics.Process]::Start(\"msedge\",\"`\"%~dp0%filename%`\"\")"
您可以在行 2
、 上用您自己的示例文件名替换我的示例文件名(特别注意不要触及结束双引号)。请注意,我故意使用 myfile! - 100%% virus free.pdf
文件名来向您表明,您 必须 将文件名中的任何百分比字符加倍,(作为百分比字符在批处理文件中使用时需要特殊处理).
事实上,我在查看一些 dos 文档后得到了答案。下面是我的解决方案(可用于使用 'open with' 此批处理脚本打开 pdf。为了避免打开 cmd window(我认为这很丑陋),我还使用 bat2exe 转换器将其转换为 exe .
@echo off
set prefix=file:///
set filepath=%~f1
set truepath=%filepath%%filepath:\=/%
start shell:AppsFolder\Microsoft.MicrosoftEdge_8wekyb3d8bbwe!MicrosoftEdge %truepath%