// please keep an implementation in sync with [junit-rt] ProcessBuilder.createProcess() @NotNull public static List<String> toCommandLine( @NotNull String command, @NotNull List<String> parameters, @NotNull Platform platform) { List<String> commandLine = ContainerUtil.newArrayListWithExpectedSize(parameters.size() + 1); commandLine.add(FileUtilRt.toSystemDependentName(command, platform.fileSeparator)); boolean isWindows = platform == Platform.WINDOWS; boolean winShell = isWindows && ("cmd".equalsIgnoreCase(command) || "cmd.exe".equalsIgnoreCase(command)) && parameters.size() > 1 && "/c".equalsIgnoreCase(parameters.get(0)); for (String parameter : parameters) { if (isWindows) { if (parameter.contains("\"")) { parameter = StringUtil.replace(parameter, "\"", "\\\""); } else if (parameter.isEmpty()) { parameter = "\"\""; } } if (winShell && StringUtil.containsAnyChar(parameter, WIN_SHELL_SPECIALS)) { parameter = quote(parameter, SPECIAL_QUOTE); } if (isQuoted(parameter, SPECIAL_QUOTE)) { parameter = quote(parameter.substring(1, parameter.length() - 1), '"'); } commandLine.add(parameter); } return commandLine; }