通过批处理和C ++代码输入打开文件夹

时间:2015-12-30 07:43:39

标签: batch-file shellexecute

我搜索了如何在批处理代码中打开文件夹,如下所示

%SystemRoot%\explorer.exe "c:\Yaya\yoyo\"

但是,如果我每次执行批处理程序时都要提供特定的文件夹怎么办?

如果您不介意,还能告诉我如何在C ++中使用它吗? 通过scanf很难改变路径..

目前我有

#include <windows.h>
#include <iostream>
int main ()
 {
     HINSTANCE result;
     result=ShellExecute(NULL,NULL,L"c:\my_folder_path_by_input",NULL,NULL,SW_SHOWDEFAULT);
     if ((int)result<=32)
     std::cout << "Error!\nReturn value: " << (int)result << "\n";
     return 0;
 }

1 个答案:

答案 0 :(得分:0)

运行包含文件夹路径的批处理文件作为参数打开,并在批处理文件%SystemRoot%\explorer.exe "%~1"中使用,或者甚至更好%SystemRoot%\explorer.exe /e,"%~1"

示例:

批处理文件OpenFolder.bat包含:

@echo off
if "%~1" == "" (
    %SystemRoot%\explorer.exe
) else (
    %SystemRoot%\explorer.exe /e,"%~1"
)

此批处理文件例如使用下面的一行启动:

OpenFolder.bat
OpenFolder.bat %windir%\Temp
OpenFolder.bat "%TEMP%"
OpenFolder.bat "%APPDATA%"
OpenFolder.bat "%USERPROFILE%\Desktop"

始终可以用双引号括起文件夹路径,但如果文件夹路径包含任何空格字符或其中一个字符,则真正需要的是运行OpenFolder时的双引号:&()[]{}^=;!'+,`~

另见Windows Explorer Command-Line Options

我不确定为什么在Windows资源管理器中打开特定文件夹根本不需要批处理文件。按 Windows + E 将在从Windows 95开始的任何Windows中打开一个新的Windows资源管理器窗口。在Explorer窗口的地址栏中输入上面的一个字符串会导致显示相应的文件夹。另请参阅有关Windows Keyboard Shortcuts的Microsoft页面。

如果未在启动批处理文件时将其指定为参数,则还有一个批处理版本要求用户输入文件夹路径。

@echo off
if not "%~1" == "" (
    %SystemRoot%\explorer.exe /e,"%~1"
    goto :EOF
)

rem There is no folder path specified as parameter.
rem Prompt user for folder path and predefine the environment variable
rem with a double quote as value to avoid batch processing exit because of
rem a syntax error if the batch file user just hits key RETURN or ENTER.

set "FolderPath=""
set /P "FolderPath=Folder path: "

rem Remove all double quotes from string entered by the user.

set "FolderPath=%FolderPath:"=%"

if "%FolderPath%" == "" (
    %SystemRoot%\explorer.exe
) else (
    %SystemRoot%\explorer.exe /e,"%FolderPath%"
    set "FolderPath="
)

要了解使用的命令及其工作原理,请打开命令提示符窗口,执行以下命令,并完全阅读为每个命令显示的所有帮助页面。

  • call /? ...解释%~1(第一个没有双引号的参数)。
  • echo /?
  • goto /?
  • if /?
  • rem /?
  • set /?