# Unable to launch elasticsearch from bat file in windows

**URL:** <https://discuss.elastic.co/t/unable-to-launch-elasticsearch-from-bat-file-in-windows/210729>\
**Category:** Elasticsearch\
**Tags:** windows\
**Created:** [December 5, 2019, 2:26pm UTC](https://discuss.elastic.co/t/unable-to-launch-elasticsearch-from-bat-file-in-windows/210729 "2019-12-05T14:26:07Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![daredevvll](https://avatars.discourse-cdn.com/v4/letter/d/eb8c5e/32.png) [@daredevvll](https://discuss.elastic.co/u/daredevvll)\
**Post date:** [December 5, 2019, 2:26pm UTC](https://discuss.elastic.co/t/unable-to-launch-elasticsearch-from-bat-file-in-windows/210729/1 "2019-12-05T14:26:08Z")

</div>

Elasticsearch Version: 7.5.0  
java version "1.8.0\_231"  
Java(TM) SE Runtime Environment (build 1.8.0\_231-b11)  
Java HotSpot(TM) 64-Bit Server VM (build 25.231-b11, mixed mode)  
Windows 10 Professional

Trying to start elasticsearch through bin/elasticsearch.bat and it throws exception from JvmOptionsParser.

**Steps to reproduce** :

1. E:\Desktop\elasticsearch-7.5.0\bin\>elasticsearch.bat

Exception in thread "main" java.nio.file.InvalidPathException: Illegal char \<:\> at index 36: **E:\Desktop\elasticsearch-7.5.0\bin\E:\Desktop\elasticsearch-7.5.0\config\jvm.options**  
at java.base/sun.nio.fs.WindowsPathParser.normalize(WindowsPathParser.java:182)  
at java.base/sun.nio.fs.WindowsPathParser.parse(WindowsPathParser.java:153)  
at java.base/sun.nio.fs.WindowsPathParser.parse(WindowsPathParser.java:77)  
at java.base/sun.nio.fs.WindowsPath.parse(WindowsPath.java:92)  
at java.base/sun.nio.fs.WindowsFileSystem.getPath(WindowsFileSystem.java:229)  
at java.base/java.nio.file.Path.of(Path.java:147)  
at java.base/java.nio.file.Paths.get(Paths.java:69)  
at org.elasticsearch.tools.launchers.JvmOptionsParser.main(JvmOptionsParser.java:62)

---

<div class="post-metadata">

**Author:** ![MiTschMR](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/mitschmr/32/48254_2.png) [@MiTschMR](https://discuss.elastic.co/u/MiTschMR)\
**Post date:** [December 5, 2019, 2:29pm UTC](https://discuss.elastic.co/t/unable-to-launch-elasticsearch-from-bat-file-in-windows/210729/2 "2019-12-05T14:29:13Z")

</div>

Hi @daredevvll

There is an illegal character in your path:

> [@daredevvll](#):
>
> Exception in thread "main" java.nio.file.InvalidPathException: Illegal char \<:\> at index 36:

Can you please show us the content of the files elasticsearch.bat, jvm.options and elasticsearch.yml?

---

<div class="post-metadata">

**Author:** ![daredevvll](https://avatars.discourse-cdn.com/v4/letter/d/eb8c5e/32.png) [@daredevvll](https://discuss.elastic.co/u/daredevvll)\
**Post date:** [December 5, 2019, 2:42pm UTC](https://discuss.elastic.co/t/unable-to-launch-elasticsearch-from-bat-file-in-windows/210729/3 "2019-12-05T14:42:29Z")

</div>

**"elasticsearch.bat"**  
@echo off

```
setlocal enabledelayedexpansion
setlocal enableextensions

SET params='%*'

:loop
FOR /F "usebackq tokens=1* delims= " %%A IN (!params!) DO (
    SET current=%%A
    SET params='%%B'
	SET silent=N

	IF "!current!" == "-s" (
		SET silent=Y
	)
	IF "!current!" == "--silent" (
		SET silent=Y
	)

	IF "!silent!" == "Y" (
		SET nopauseonerror=Y
	) ELSE (
	    IF "x!newparams!" NEQ "x" (
	        SET newparams=!newparams! !current!
        ) ELSE (
            SET newparams=!current!
        )
	)

    IF "x!params!" NEQ "x" (
		GOTO loop
	)
)

CALL "%~dp0elasticsearch-env.bat" || exit /b 1
IF ERRORLEVEL 1 (
	IF NOT DEFINED nopauseonerror (
		PAUSE
	)
	EXIT /B %ERRORLEVEL%
)

if not defined ES_TMPDIR (
  for /f "tokens=* usebackq" %%a in (`CALL %JAVA% -cp "!ES_CLASSPATH!" "org.elasticsearch.tools.launchers.TempDirectory"`) do set ES_TMPDIR=%%a
)

set ES_JVM_OPTIONS=%ES_PATH_CONF%\jvm.options
@setlocal
for /F "usebackq delims=" %%a in (`CALL %JAVA% -cp "!ES_CLASSPATH!" "org.elasticsearch.tools.launchers.JvmOptionsParser" "!ES_JVM_OPTIONS!" ^|^| echo jvm_options_parser_failed`) do set ES_JAVA_OPTS=%%a
@endlocal & set "MAYBE_JVM_OPTIONS_PARSER_FAILED=%ES_JAVA_OPTS%" & set ES_JAVA_OPTS=%ES_JAVA_OPTS%

if "%MAYBE_JVM_OPTIONS_PARSER_FAILED%" == "jvm_options_parser_failed" (
  exit /b 1
)

%JAVA% %ES_JAVA_OPTS% -Delasticsearch -Des.path.home="%ES_HOME%" -Des.path.conf="%ES_PATH_CONF%" -Des.distribution.flavor="%ES_DISTRIBUTION_FLAVOR%" -Des.distribution.type="%ES_DISTRIBUTION_TYPE%" -Des.bundled_jdk="%ES_BUNDLED_JDK%" -cp "%ES_CLASSPATH%" "org.elasticsearch.bootstrap.Elasticsearch" !newparams!

endlocal
endlocal
exit /b %ERRORLEVEL%

```

**"elasticsearch.yml"**

```
    # ======================== Elasticsearch Configuration =========================
    #
    # NOTE: Elasticsearch comes with reasonable defaults for most settings.
    # Before you set out to tweak and tune the configuration, make sure you
    # understand what are you trying to accomplish and the consequences.
    #
    # The primary way of configuring a node is via this file. This template lists
    # the most important settings you may want to configure for a production cluster.
    #
    # Please consult the documentation for further information on configuration options:
    # https://www.elastic.co/guide/en/elasticsearch/reference/index.html
    #
    # ---------------------------------- Cluster -----------------------------------
    #
    # Use a descriptive name for your cluster:
    #
    #cluster.name: my-application
    #
    # ------------------------------------ Node ------------------------------------
    #
    # Use a descriptive name for the node:
    #
    #node.name: node-1
    #
    # Add custom attributes to the node:
    #
    #node.attr.rack: r1
    #
    # ----------------------------------- Paths ------------------------------------
    #
    # Path to directory where to store the data (separate multiple locations by comma):
    #
    #path.data: /path/to/data
    #
    # Path to log files:
    #
    #path.logs: /path/to/logs
    #
    # ----------------------------------- Memory -----------------------------------
    #
    # Lock the memory on startup:
    #
    #bootstrap.memory_lock: true
    #
    # Make sure that the heap size is set to about half the memory available
    # on the system and that the owner of the process is allowed to use this
    # limit.
    #
    # Elasticsearch performs poorly when the system is swapping the memory.
    #
    # ---------------------------------- Network -----------------------------------
    #
    # Set the bind address to a specific IP (IPv4 or IPv6):
    #
    #network.host: 192.168.0.1
    #
    # Set a custom port for HTTP:
    #
    #http.port: 9200
    #
    # For more information, consult the network module documentation.
    #
    # --------------------------------- Discovery ----------------------------------
    #
    # Pass an initial list of hosts to perform discovery when this node is started:
    # The default list of hosts is ["127.0.0.1", "[::1]"]
    #
    #discovery.seed_hosts: ["host1", "host2"]
    #
    # Bootstrap the cluster using an initial set of master-eligible nodes:
    #
    #cluster.initial_master_nodes: ["node-1", "node-2"]
    #
    # For more information, consult the discovery and cluster formation module documentation.
    #
    # ---------------------------------- Gateway -----------------------------------
    #
    # Block initial recovery after a full cluster restart until N nodes are started:
    #
    #gateway.recover_after_nodes: 3
    #
    # For more information, consult the gateway module documentation.
    #
    # ---------------------------------- Various -----------------------------------
    #
    # Require explicit names when deleting indices:
    #
    #action.destructive_requires_name: true

```

**"jvm.options"**  
## JVM configuration

```
################################################################
## IMPORTANT: JVM heap size
################################################################
##
## You should always set the min and max JVM heap
## size to the same value. For example, to set
## the heap to 4 GB, set:
##
## -Xms4g
## -Xmx4g
##
## See https://www.elastic.co/guide/en/elasticsearch/reference/current/heap-size.html
## for more information
##
################################################################

# Xms represents the initial size of total heap space
# Xmx represents the maximum size of total heap space

-Xms1g
-Xmx1g

################################################################
## Expert settings
################################################################
##
## All settings below this section are considered
## expert settings. Don't tamper with them unless
## you understand what you are doing
##
################################################################

## GC configuration
-XX:+UseConcMarkSweepGC
-XX:CMSInitiatingOccupancyFraction=75
-XX:+UseCMSInitiatingOccupancyOnly

## G1GC Configuration
# NOTE: G1GC is only supported on JDK version 10 or later.
# To use G1GC uncomment the lines below.
# 10-:-XX:-UseConcMarkSweepGC
# 10-:-XX:-UseCMSInitiatingOccupancyOnly
# 10-:-XX:+UseG1GC
# 10-:-XX:G1ReservePercent=25
# 10-:-XX:InitiatingHeapOccupancyPercent=30

## JVM temporary directory
-Djava.io.tmpdir=${ES_TMPDIR}

## heap dumps

# generate a heap dump when an allocation from the Java heap fails
# heap dumps are created in the working directory of the JVM
-XX:+HeapDumpOnOutOfMemoryError

# specify an alternative path for heap dumps; ensure the directory exists and
# has sufficient space
-XX:HeapDumpPath=data

# specify an alternative path for JVM fatal error logs
-XX:ErrorFile=logs/hs_err_pid%p.log

## JDK 8 GC logging
8:-XX:+PrintGCDetails
8:-XX:+PrintGCDateStamps
8:-XX:+PrintTenuringDistribution
8:-XX:+PrintGCApplicationStoppedTime
8:-Xloggc:logs/gc.log
8:-XX:+UseGCLogFileRotation
8:-XX:NumberOfGCLogFiles=32
8:-XX:GCLogFileSize=64m

# JDK 9+ GC logging
9-:-Xlog:gc*,gc+age=trace,safepoint:file=logs/gc.log:utctime,pid,tags:filecount=32,filesize=64m
```

---

<div class="post-metadata">

**Author:** ![jaymode](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/jaymode/32/50103_2.png) [@jaymode](https://discuss.elastic.co/u/jaymode)\
**Post date:** [December 6, 2019, 3:22pm UTC](https://discuss.elastic.co/t/unable-to-launch-elasticsearch-from-bat-file-in-windows/210729/5 "2019-12-06T15:22:25Z")

</div>

This is interesting; I tried a new Windows instance with Java 8 and Elasticsearch 7.5 and did not encounter any issues. If possible can you share the output of your environment using the `SET` command? Additionally, something that might be beneficial to debugging is to change `@echo off` in the `elasticsearch.bat` file to `@echo on` and provide the full output of executing elasticsearch.bat after that change.

---

<div class="post-metadata">

**Author:** ![daredevvll](https://avatars.discourse-cdn.com/v4/letter/d/eb8c5e/32.png) [@daredevvll](https://discuss.elastic.co/u/daredevvll)\
**Post date:** [December 7, 2019, 10:16pm UTC](https://discuss.elastic.co/t/unable-to-launch-elasticsearch-from-bat-file-in-windows/210729/6 "2019-12-07T22:16:34Z")

</div>

Yes that was interesting for me too because after a while i tried again and it worked. Maybe i tried the script with not "Run with Administrator" before. And echo on helped me too. Thanks for that.

---

<div class="post-metadata">

**Author:** ![system](https://us1.discourse-cdn.com/elastic/original/3X/1/a/1ac57faf039f6b580b3f104ef42a2a89e41014de.png) [@system](https://discuss.elastic.co/u/system)\
**Post date:** [January 4, 2020, 10:16pm UTC](https://discuss.elastic.co/t/unable-to-launch-elasticsearch-from-bat-file-in-windows/210729/7 "2020-01-04T22:16:35Z")

</div>

This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.
