Сценарий .cmd/.bat командной строки, как получить каталог запущения скрипта

Исключение нулевого указателя - это индикатор того, что вы используете объект, не инициализируя его.

Например, ниже - класс ученика, который будет использовать его в нашем коде.

public class Student {

    private int id;

    public int getId() {
        return this.id;
    }

    public setId(int newId) {
        this.id = newId;
    }
}

Приведенный ниже код дает вам исключение с нулевым указателем.

public class School {

    Student obj_Student;

    public School() {
        try {
            obj_Student.getId();
        }
        catch(Exception e) {
            System.out.println("Null Pointer ");
        }
    }
}

Поскольку вы используете Obj_Student, но вы забыли инициализировать его, как в правильном коде, показанном ниже:

public class School {

    Student obj_Student;

    public School() {
        try {
            obj_Student = new Student();
            obj_Student.setId(12);
            obj_Student.getId();
        }
        catch(Exception e) {
            System.out.println("Null Pointer ");
        }
    }
}
78
задан Govind Parmar 22 January 2017 в 21:21
поделиться

3 ответа

У Raymond Chen есть несколько идей:

https://devblogs.microsoft.com/oldnewthing/20050128-00/? p=36573

, Заключенный в кавычки здесь полностью, потому что архивы MSDN склонны быть несколько ненадежными:

простой способ состоит в том, чтобы использовать %CD% псевдопеременный. Это расширяется до текущего рабочего каталога.

set OLDDIR=%CD%
.. do stuff ..
chdir /d %OLDDIR% &rem restore current directory

(Конечно, каталог, save/restore, возможно, более легко был сделан с pushd / popd, но это не точка здесь.)

Эти %CD% прием удобен даже из командной строки. Например, я часто оказываюсь в каталоге, где существует файл, на который я хочу воздействовать, но... о, мне нужно к chdir к некоторому другому каталогу для выполнения той операции.

set _=%CD%\curfile.txt
cd ... some other directory ...
somecommand args %_% args

(мне нравится использовать %_% в качестве моей переменной среды царапины.)

Тип SET /? для наблюдения других псевдопеременных, обеспеченных командным процессором.

Также комментарии в статье определенно стоят просканировать, например, этого (с помощью Wayback Machine, так как комментариев не стало от более старых статей):

http://blogs.msdn.com/oldnewthing/archive/2005/01/28/362565.aspx#362741

Это покрывает использование % ~dp0:

, Если Вы хотите знать, где пакетный файл живет: %~dp0

%0 название пакетного файла. ~dp дает Вам диск и путь указанного аргумента.

57
ответ дан Richard Neish 24 November 2019 в 10:28
поделиться

Это эквивалентно пути сценария:

%~dp0

Это использует пакетный синтаксис расширения параметра. Параметр 0 всегда является самим сценарием.

, Если Ваш сценарий хранится в C:\example\script.bat, то %~dp0 оценивает к C:\example\.

ss64.com имеет больше информации о синтаксисе расширения параметра. Вот соответствующая выборка:

можно получить значение любого параметра с помощью %, сопровождаемого, он - числовая позиция по командной строке.

[...]

, Когда параметр используется для предоставления имени файла тогда, следующий расширенный синтаксис может быть применен:

[...]

% ~d1 Расширяются %1 до Буквы диска только - C:

[...]

% ~p1 Расширяется %1 до Пути только, например, \utils\, это включает запаздывание \, который может быть интерпретирован как символ ESC некоторыми командами.

[...]

модификаторы выше могут быть объединены:

% ~dp1 Разворачивает %1 до буквы диска и соединяет [только 1 119] каналом

[...]

, можно получить путь самого сценария пакетной обработки с %0, расширения параметра могут быть применены к этому так, % ~dp0 возвратит Диск и Путь к сценарию пакетной обработки, например, W:\scripts\

143
ответ дан anishpatel 24 November 2019 в 10:28
поделиться
for /F "eol= delims=~" %%d in ('CD') do set curdir=%%d

pushd %curdir%

Источник

0
ответ дан 24 November 2019 в 10:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: