Преобразовать строку пути из unc в uri, заменяя косые черты обратными слешами в скрипте Google Apps - PullRequest
0 голосов
/ 05 июня 2018

Мне нужно преобразовать путь в этот UNC.Я искал и искал и не могу ничего собрать.

"\\NAS_01\GlobalShare\Docs\Customers\2017\S\Smith, John\photo1.jpg"

Мне нужно удалить часть пути "\ NAS_01 \ GlobalShare \ Docs \ Customers \", а также "photo1.jpg" и получить:

2017\S\Smith, John\

, чтобы я мог передать его следующей функции:

function getDriveFolderNoCreate(path, rootFolder) {
  
  var name, folder, search, fullpath;
  
  // Remove extra slashes and trim the path
  fullpath = path.replace(/^\/*|\/*$/g, '').replace(/^\s*|\s*$/g, '').split("/");
  
  // Always start with the main Drive folder
  folder = rootFolder;
  
  for (var subfolder in fullpath) {
    
    name = fullpath[subfolder];
    search = folder.getFoldersByName(name);
    
    if (search.hasNext()) {
        var folder = search.next;
        var folderID = folder.getId();
        return folderID;
    }
  }
}

Я собираюсь вернуть URL-адрес, чтобы открыть папку на Google Диске с тем же путем.

Ответы [ 2 ]

0 голосов
/ 06 июня 2018

Я получил многокомпонентное решение, которое работает очень хорошо.

Я вставляю путь заливки UNC в ячейку B2.Эта формула находится в B3 = Index (split (B2, "\"), 0, 8). Она возвращает точное имя папки, которое мне нужно.Тогда в моем файле GS:

function findDriveFolder() {
  var pFId = "XYZ1233333333333";
  var input = SpreadsheetApp.getActive().getRange("B3").getValue();
  var folders =  DriveApp.getFoldersByName(input); 
  Logger.log("folders: " + folders[0]);
  while (folders.hasNext()) {
    var folder = folders.next();
  var url = folder.getUrl();
  showAnchor("View Folder", url);
  }
}

function showAnchor(name,url) {
  var html = '<html><body><a href="'+url+'" target="blank" onclick="google.script.host.close()">'+name+'</a></body></html>';
  var ui = HtmlService.createHtmlOutput(html)
  SpreadsheetApp.getUi().showModelessDialog(ui,"Files Folder");
}

Я еще не реализовал часть searchFolders, которая, я надеюсь, ускорит ее.По крайней мере, сейчас это работает.

0 голосов
/ 06 июня 2018

Apps Script требует экранирования ввода, если вы сами пишете строку (т.е. тестируете ввод).

неправильно:

input = "\\NAS_01\GlobalShare\Docs\Customers\2017\S\Smith, John\photo1.jpg"

вправо:

input = "\\\\NAS_01\\GlobalShare\\Docs\\Customers\\2017\\S\\Smith, John\\photos1.jpg"

В приложении Apps Script я могу получитьсоответствующая часть со следующим регулярным выражением:
/\d{4}\\[A-Z]\\.+\\/

т.е.:

function unc2uri(input) {
  const forwardSlash = String.fromCharCode(47);
  const backSlash = String.fromCharCode(92);

  if(!input)
    input = '\\\\NAS_01\\GlobalShare\\Docs\\Customers\\2017\\S\\Smith, John\\photo1.jpg';
  // Should show \\NAS_01\GlobalShare\Docs\Customers\2017\S\Smith, John\photo1.jpg
  Logger.log(input);
  const matcher = /\d{4}\\[A-Z]\\.+\\/;
  const arrayOfMatches = input.match(matcher);
  // Should show [2017\S\Smith, John\].
  Logger.log(arrayOfMatches);
}

Чтобы проверить, запросите строку ввода из другого места (например, Browser.inputBox) ипередайте это выше как input:

function readInput() {
  unc2uri(Browser.inputBox("What's the path?"));
}

В поле ввода, вы должны ввести строку, которую вы ожидаете отправить, как мы ее видим, т.е. \\NAS_01\GlobalShare\Docs\Customers\2017\S\Smith, John\photo1.jpg

...