Functions for File & Folder
Get folder. If doesn't exist, created it
function GetFolder(path) {
var folder = new Folder(path);
if (!folder.exists) {
if (!folder.create(path)) folder = null;
}
return folder;
}
Get file name without extension
function GetFileName(fileName) {
var str = "";
var res = fileName.lastIndexOf(".");
if (res == -1) {
str = fileName;
}
else {
str = fileName.substr(0, res);
}
return str;
}
Get extension without file name
function GetExtension(name) {
var idx = name.lastIndexOf(".");
var ext = "";
if (idx > -1) {
ext = name.substr((idx + 1));
}
return ext;
}
Remove the path and file extension to return the file name
function getFileName(value) {
var path = value.toString();
var lastIndex = path.lastIndexOf("/");
var file = path.slice(lastIndex + 1);
var lastIndexPeriod = file.lastIndexOf(".");
return file.slice(0, lastIndexPeriod);
}
Write to file
function WriteToFile(text) {
file = new File("~/Desktop/Log.txt");
file.encoding = "UTF-8";
if (file.exists) {
file.open("e");
file.seek(0, 2);
}
else {
file.open("w");
}
file.write(text);
file.close();
}
Verify folder based on the Bob Stucky's library
function VerifyFolder(folder) {
if (!folder.exists) {
var folder = new Folder(folder.absoluteURI);
var arr1 = new Array();
while (!folder.exists) {
arr1.push(folder);
folder = new Folder(folder.path);
}
var arr2 = new Array();
while (arr1.length > 0) {
folder = arr1.pop();
if (folder.create()) {
arr2.push(folder);
} else {
while (arr2.length > 0) {
arr2.pop.remove();
}
throw "Folder creation failed";
}
}
}
}
GetScriptsFolder by Harbs
function GetScriptsFolder() {
var scriptsFolder = null;
do{
// On Mac this is a folder inside the app package
var appFolder = Folder.startup;
if (! appFolder.exists){break;}
scriptsFolder = Folder(appFolder + "/Scripts");
while (appFolder.exists && ! scriptsFolder.exists){
appFolder = appFolder.parent;
scriptsFolder = Folder(appFolder + "/Scripts");
}
if (! scriptsFolder.exists){
scriptsFolder = null;
break;
}
}
while (false);
return scriptsFolder;
}
Get script path
function GetScriptPath() {
try{
return app.activeScript;
}
catch(err){
return new File(err.fileName);
}
}
function getScriptFolderPath
Get Filepath from current script
returns {Folder} script folder
function getScriptFolderPath() {
var skriptPath;
try {
skriptPath = app.activeScript.parent;
}
catch (e) {
/* We're running from the VSC */
skriptPath = File(e.fileName).parent;
}
if (skriptPath.toString().match(/\/lib$/)) {
skriptPath = skriptPath.parent;
}
return skriptPath;
}
Move file by Kasyan
Unlike AS or VB, JS has no move method for file object — a workaround is to first copy a file and then remove the original. But this approach has a shortcoming: files lose their original creation and modification dates, labels, etc. This function uses native AS or VB Move command/method depending on the platform the script is run, thus preserving this information. Click here to download
Set label to a file by Kasyan
Set label to a file on Mac by JavaScript.
How to copy a file to another folder without changing DateModified using Javascript in Windows
Main();
function Main() {
if (File.fs == "Windows") {
var file = new File("/E/Temp_1/Test.txt");
var destinationFolderPath = "/D/Temp_2/";
var destinationFolder = new Folder(destinationFolderPath);
if (!destinationFolder.exists) destinationFolder.create();
var vbScript = 'Set fs = CreateObject("Scripting.FileSystemObject")\r';
vbScript += 'fs.CopyFile "' + file.fsName.replace("\\", "\\\\") + '", "' + destinationFolder.fsName.replace("\\", "\\\\") + "\\" + file.name + '"';
app.doScript(vbScript, ScriptLanguage.visualBasic);
}
}
Get startup disk — JavaScript function that gets the name of startup disk Both on Mac and Windows
How to find all indd-files inside subfolders
var files;
var folder = Folder.selectDialog("Select a folder with InDesign documents");
if (folder != null) {
files = GetFiles(folder);
if (files.length > 0) {
alert("Found " + files.length + " InDesign documents");
}
else {
alert("Found no InDesign documents");
}
}
function GetFiles(theFolder) {
var files = [],
fileList = theFolder.getFiles(),
i, file;
for (i = 0; i < fileList.length; i++) {
file = fileList[i];
if (file instanceof Folder) {
files = files.concat(GetFiles(file));
}
else if (file instanceof File && file.name.match(/\.indd$/i)) {
files.push(file);
}
}
return files;
}
Open all indd-files in the selected folder
app.open(Folder(Folder.selectDialog( "Select a folder with InDesign files")).getFiles(function(f) { return f instanceof File && !f.hidden && (f.name.match(/\.indd$/i) || f.type.match(/^IDd/)); } ));
Get subfolders
function GetSubfolders(theFolder) {
var files = [],
fileList = theFolder.getFiles(),
i, file;
for (i = 0; i < fileList.length; i++) {
file = fileList[i];
if (file instanceof Folder) {
files.push(file);
}
}
return files;
}
Write the contents of the folder
var myFolder = Folder.selectDialog ('Choose a Folder');
$.writeln('-------------------------------\r' + myFolder.displayName + '\r-------------------------------\r');
if(myFolder != null){
var myFiles = myFolder.getFiles('*.*');
for (i = 0; i < myFiles.length; i++){
var myFile = myFiles[i];
$.writeln(myFile.displayName);
}
}
FileFilter function for Mac
var xmlFile = File.openDialog("Choose an XML file", (File.fs == "Macintosh") ? FileFilter : "XML files:*.xml;All files:*.*");
function FileFilter(file) {
var extention = ".xml";
var lowerCaseName = file.name;
lowerCaseName.toLowerCase();
if (lowerCaseName.indexOf(extention) == file.name.length - extention.length) {
return true;
}
else if (file instanceof Folder) {
return true;
}
else {
return false;
}
}
function getFileFilter
Returns a File-Filter for a File-Dialog
@param {String} filter The File filter string in Windows Syntax: A filter expression such as "Javascript files:*.jsx;All files:*.*".
@return {String|Function} The Filter String for Windows, the Filter Function for MacOS
function getFileFilter(fileFilter) {
if (fileFilter == undefined || File.fs == "Windows") {
return fileFilter;
}
else {
// Mac
var extArray = fileFilter.split(":")[1].split(",");
return function fileFilter(file) {
if (file.constructor.name === "Folder") return true;
if (file.alias) return true;
for (var e = 0; e < extArray.length; e++) {
var ext = extArray[e];
ext = ext.replace(/\*/g, "");
// log.writeln(ext);
// log.writeln(file.name);
// log.writeln(file.name.slice(ext.length * -1) === ext);
// log.writeln("---")
if (file.name.slice(ext.length * -1) === ext) return true;
}
}
}
}
Trim path
function TrimPath(path) {
path = decodeURI(path);
var trimPath = ((path.split("/").length > 3) ? ".../" : "") + path.split("/").splice(-3).join("/");
return trimPath;
}
How to open a file of specific type(s) both on Mac and Windows:
if (isOSX()) {
var csvFile = File.openDialog('Select a CSV File', function (f) { return (f instanceof Folder) || f.name.match(/\.csv$/i);} );
} else {
var csvFile = File.openDialog('Select a CSV File','comma-separated-values(*.csv):*.csv;');
}
if (File.fs == "Windows") {
scriptFile = File.openDialog("Pick a script", "JavaScript files:*.jsx, JavaScript files: *.js, Binary JavaScript files: *.jsxbin, Visual Basic Script files:*.vbs, All Files:*.*");
}
else {
scriptFile = File.openDialog("Pick a script", function(file) { return file instanceof Folder || (!(file.hidden) && (file.name.match(/\.scpt|jsx*(bin)*$/i))); }, false);
}
Sort file names function for Mac (workaround for a Mac OSx bug)
Save dialog — function written by Trevor — opens save dialog on Mac and makes sure the file gets saved with the correct extension.
See also tips here
