Абсолютные пути Node JS с использованием переменных Windows%, рассматриваемых как относительные

Я использую метод fs.unlinkSync() в сценарии Node.js, чтобы удалить файл, расположенный в каталоге Appdata.

Лучшей практикой поиска каталога Appdata является указание пути с использованием %appdata%, поэтому в моем коде:

var filePath = '%appdata%/some/path/file.ext';
fs.unlinkSync(filePath);

Проблема в том, что возвращается ошибка, указывающая на неверный путь, потому что он пытается найти что-то вроде:

C:\my\project\%appdata%\some\path\file.ext

Которого явно не существует.

Поэтому я ищу лучший способ преобразовать %appdata% в C:\Users\user\AppData\Roaming.

Надеюсь, я смогу сделать что-то вроде:

var filePath = resolveToAbsolutePath('%appdata%/some/path/file.ext');
fs.unlinkSync(filePath);

Любая помощь приветствуется.

Заметки:

  1. Нет, проблема не связана с использованием косой черты вместо обратной.
  2. Это отличается от использования переменных среды, так как я получаю пути извне, и мне также нужно иметь возможность разрешать пути %. Я заинтересован в обобщении решения, а не в ручной замене путей данными переменных среды.

person Selfish    schedule 08.10.2015    source источник
comment
Возможный дубликат Как читать переменную среды в Node.js   -  person Patrick Evans    schedule 08.10.2015
comment
На самом деле это не дубликат, так как я не собираюсь вручную заменять известную строку известной переменной. Я ищу, чтобы разрешить любой путь в его полную, абсолютную версию. Связанный вопрос предлагает вручную заменить известные переменные.   -  person Selfish    schedule 08.10.2015


Ответы (1)


Вы можете разрешить это, используя функцию, которая разрешит путь:

function resolveToAbsolutePath(path) {
    return path.replace(/%([^%]+)%/g, function(_, key) {
        return process.env[key];
    });
}
resolveToAbsolutePath('%LOCALAPPDATA%\\Google\\Chrome\\Application');
person dcohenb    schedule 08.10.2015