使用saveAs(“ ^ c”)的UltraEdit脚本

时间:2019-06-07 19:33:21

标签: ultraedit

我正在使用Excel宏来调用UltraEdit,以便对某些文件执行脚本。

在Excel宏中,我编写了要通过UltraEdit脚本保存新文件的路径。到此为止,所有工作正常进行,并且如果我写了在临时文件中读取的值,我会看到我具有正确的路径。 但是,当我使用saveAs(“ ^ c”)时,文件不会保存到我指定的路径,而是保存到当前目录。

如果我使用以下代码,它将正确保存文件。但我不想对路径进行硬编码:

  var sPath="H:\\IPEX\\DataFiles\\IPEX_Originals_Cleaned_Files\\"
      + sTransSet 
      +"_"
      + sDocNum
      + "_"
      + now.getFullYear()
      + month
      + day
      + "-"
      + hours
      + minutes
      + seconds
      + ".txt";          

   UltraEdit.saveAs(sPath);

这是我要修复的代码:

UltraEdit.selectClipboard(1); // switch to user clipboard #1   
var sPath=asParameterList[0]
      + sTransSet 
      +"_"
      + sDocNum
      + "_"
      + now.getFullYear()
      + month
      + day
      + "-"
      + hours
      + minutes
      + seconds
      + ".txt";

UltraEdit.clipboardContent=sPath;          

UltraEdit.outputWindow.write("sPath Value After assign= "+sPath);   
UltraEdit.saveAs("^c");

write命令显示以下内容:

sPath Value After assign=  

H:\\IPEX\\DataFiles\\IPEX_Originals_Cleaned_Files\\856_IPEX-155630-2_20190607-152606.txt

不是将文件保存到目录中

H:\\IPEX\\DataFiles\\IPEX_Originals_Cleaned_Files\\ 

它将文件保存到目录

H:\IPEX\DataFiles\Boomi_IPEX_Files

这是原始文件的目录。

2 个答案:

答案 0 :(得分:1)

您的调试输出在新行上打印文件名。似乎filename前面有换行符号。我认为这就是为什么它不起作用。尝试从HttpClient client = new HttpClient(); var values = new Dictionary<string, string> { { "resource", "xxx" }, { "client_id", "xxx" }, { "client_secret","xxx"}, {"client_info","1" }, {"grant_type","client_credentials" } }; var content = new FormUrlEncodedContent(values); var response = client.PostAsync("https://login.microsoftonline.com/contoso.com/oauth2/token", content).Result; var responseString = response.Content.ReadAsStringAsync().Result; return responseString; 到第一个字符为止修剪所有空格和换行。

答案 1 :(得分:1)

我同意Alexander Pavlov及其对问题原因的分析。剪贴板中的完整合格文件名无效,因为其中带有换行符。

完整的合格文件名字符串还包含\\,而不仅仅是\作为目录分隔符。与换行符相比,文件路径中的\\对于Windows文件系统内核功能来说没有问题,换行符是根据Microsoft文档Naming Files, Paths, and Namespaces的文件名或路径的无效字符。但是,完整的合格文件名仍应100%正确。

这些问题最好在Excel文件的Visual Basic宏中解决。在Visual Basic字符串中,反斜杠字符不是像其他编程和脚本语言中那样的转义字符。因此,必须在Visual Basic宏中仅使用\定义文件路径,而使用\\ 定义文件路径。并且在将完整的合格文件名复制到剪贴板之前,还应从Excel宏的文件路径字符串中删除前导空格/制表符/换行符。

当然也可以在下面的行中使用UltraEdit脚本,然后再将具有全限定名的新文件保存到剪贴板中。

UltraEdit.clipboardContent = UltraEdit.clipboardContent.replace(/^\s+/,"").replace(/\\\\/g,"\\");

第一个替换操作会根据Unicode定义删除所有前导空格,第二个替换操作会将文件名字符串中所有出现的\\修改为\,然后再将固定的完全限定文件名复制回剪贴板

但是实际上并不需要像Alexander Pavlov那样使用剪贴板。无效的完整合格文件名字符串已存储在JavaScript String对象中,其名称不是很好sPath。此字符串变量的更好名称是sFullFileName。 UltraEdit函数UltraEdit.saveAs()需要一个 String 对象作为参数。因此也可以在UltraEdit脚本中使用:

var sFullFileName = sPath.replace(/^\s+/,"").replace(/\\\\/g,"\\");
UltraEdit.saveAs(sFullFileName);

注意:对于具有UNC路径且必须以两个反斜杠开头的完整合格文件名,仅用\\替换所有出现的\是错误的