Текущий каталог в DOSBox [Необязательно: с помощью TURBO C]

Я хочу запустить команду в определенном каталоге, а затем вернуться обратно. (На это есть причина [действительность параметров...]).

Я попытался сделать это в пакетном файле для DOSBox...

@echo off
cd>cd.cd
cd %mypath%
dosomething 1 2 3
::I am not sure....
cd (type cd.cd) 

%CD%, %dI, FOR цикл ничего не работает в DOSBox...

Я написал программу на C, но не смог найти функцию, которая возвращает текущий каталог для TURBO C 16-bit...

Может кто-нибудь, пожалуйста, помогите мне с этим?


person Nephew of Stackoverflow    schedule 12.02.2020    source источник


Ответы (3)


%CD% — это переменная в Windows cmd, поэтому вы не можете использовать ее в MS-DOS. Вы можете обойти это, сохранив вывод текущего каталога из команды cd без каких-либо параметров в переменную, перенаправив вывод команды в файл, а затем прочитать файл с диска

  • Подготовьте файл, содержащий только @set cd= без символов новой строки. Его можно создать в DOS, нажав Ctrl+Z, затем Enter при запуске COPY CON. Назовем его init.txt
  • Затем каждый раз, когда вы хотите запустить текущий каталог

    cd >cd.txt
    copy init.txt+cd.txt setcd.bat
    setcd
    
  • Последняя команда сохранит текущий каталог в переменной %CD%

Получить текущий каталог

person phuclv    schedule 13.02.2020
comment
Есть ли способ добавить строку в ту же строку DOS? - person Nephew of Stackoverflow; 13.02.2020
comment
На самом деле мой DOSBox почему-то зависает на copy con <file-name>. - person Nephew of Stackoverflow; 13.02.2020
comment
@NephewofStackoverflow не зависает. Он ждет, пока вы введете содержимое, поскольку CON – это клавиатура< /а>. См. раздел копирование. Вот почему вы не можете создать папку с именем «CON» в Windows (легко) - person phuclv; 13.02.2020
comment
О.. Это было довольно неожиданно ????. Есть ли способ, которым мы можем писать в одной строке вместо двух разных команд? - person Nephew of Stackoverflow; 13.02.2020
comment
что-то вроде @echo set cd=(somespecialcharacter)>mp, а затем @cd>>mp - person Nephew of Stackoverflow; 13.02.2020
comment
@NephewofStackoverflow вы просто подготавливаете init.txt один раз и используете его навсегда. Не нужно заботиться об этом файле. echo пишет новую строку, поэтому вы не можете использовать эхо для этого - person phuclv; 13.02.2020
comment
Есть ли способ создать сценарий, который запускается после каждого изменения компакт-диска или диска? - person Nephew of Stackoverflow; 13.02.2020
comment
вероятно, создайте пакетный файл, который вызывает CD и делает все, что вы хотите, и полностью избегайте использования оригинального CD. Но это выходит за рамки этого вопроса. Вы должны спросить другой - person phuclv; 13.02.2020
comment
@phuclv: звучит как-то знакомо - person Stephan; 13.02.2020


  1. Командный метод (первый ответ @phuclv) (Недостаток: необходимо поддерживать постоянный файл)

  2. Метод сборки (первый ответ @phuclv) (Недостаток: я не могу найти способ выполнять системные вызовы в сборке, было бы здорово, если бы кто-нибудь мог привести пример и попросить какого-нибудь привилегированного пользователя отредактируйте этот ответ, чтобы удалить эту информацию)

  3. Метод TURBOC (Поскольку я все равно писал код C90, я просто использовал способ, которым и собирался.)

Вот пример кода C90, который можно использовать для получения и выполнения некоторых операций в TURBOC3:

#include<stdio.h>
//#include<string.h>

void main()
{

  char path[128];
  system("cd>__p_");
  fscanf(fopen("__p_","r"),"%[^\n]",path);
  remove("__p_");

  //path variable/array/pointer contains your current path.

  //printf(path);

  //strcat(command,path); //char command[128]="cd ";
  //system(command); 

}
person Nephew of Stackoverflow    schedule 13.02.2020
comment
Разве вы не можете использовать функцию Turbo-C getcwd для получения текущего рабочего каталога? x-hacker.org/ng/borcpp/ng2e153.html - person Michael Petch; 13.02.2020
comment
Вы можете просто использовать intdos() для запуска прерывания, нет необходимости использовать встроенный ассемблер. Но даже если вы хотите использовать встроенную сборку, просто mov ah, 52h; int 21h после сохранения необходимых регистров. В противном случае используйте getcurdir или getcwd - person phuclv; 14.02.2020