SetCurrentDirectory(Path) работает только в пределах приложения

void DirChange(void)
{ const TCHAR *Path[] = {"\\Мои документы\\Мои видеозаписи\\","\\Documents and Settings\\Администратор\\Мои документы\\Мои видеозаписи\\"};
  DWORD Ret;
  TCHAR Buffer[MAX_PATH];
  Ret = GetCurrentDirectory(sizeof(Buffer),Buffer);
  if(Ret>0 && Ret<=sizeof(Buffer))
  { int i = 0;
    if(Buffer[0]=='D'||Buffer[0]=='d') i = 1;
    Ret = SetCurrentDirectory(Path[i]);
    if(!Ret)
    { Exit = GetLastError(); return;
    }
    Ret = GetCurrentDirectory(sizeof(Buffer),Buffer);
    if(Ret>0 && Ret<=sizeof(Buffer))
    { MessageBox(hWindow,Buffer,"Kuno",MB_ICONINFORMATION);
    }
  }
  else Exit = GetLastError();
}

Запускаю из под Totalcmd, всё отлично, но после завершения остаюсь в прежнем каталоге.
Если запускать из под cmd.exe kuno.bat, то остаюсь в новом каталоге, если Kuno.exe — в прежнем.

kuno.bat

@Echo Off
@Echo %CD%|>nul FindStr /B /I /C:"C:"
If %ErrorLevel%==0 goto c:
@Echo %CD%|>nul FindStr /B /I /C:"D:"
If %ErrorLevel%==0 goto d:
goto exit
:d
CD "\Documents and Settings\Администратор\Мои документы\Мои видеозаписи"
goto exit
:c
CD "\Мои документы\Мои видеозаписи"
:exit

Ну, в общем-то, оно так и должно работать. SetCurrentDirectory работает для текущего процесса (в данном случае это твоё приложение). Batch-файл работает на уровне командного интерпретатора (конкретного процесса). В контексте операционной системы нет таких единых для всех приложений понятий как «текущий диск» или «текущий каталог». Если ты запустишь ещё один командный интерпретатор, то у него будет свой «текущий диск» и «текущий каталог».

Ответить

Вы можете использовать разметку markdown для оформления комментариев и постов. Используйте функцию предпросмотра для проверки корректности разметки.

Пожалуйста, оформляйте исходный код в соответствии с правилами разметки. Для того, чтобы вставить код в комментарий, скопируйте его в текстовое поле ниже, после чего выделите то, что скопировали и нажмите кнопку «код» в панели инструментов. Иначе ваш код может принять нечитаемый вид.

Либо производите оформление кода вручную, следующим образом:

``` #include <iostream> using namespace std; int main() { // ... } ```

Предпросмотр сообщения

Ваше сообщение пусто.