Skip to main content

A simple tool to generate a call graph for calls within Windows CMD (batch) files.

Project description

# cmd-call-graph

[![Build Status](https://api.travis-ci.org/Microsoft/cmd-call-graph.svg?branch=master)](http://travis-ci.org/Microsoft/cmd-call-graph)
[![PyPI](https://img.shields.io/pypi/v/cmd-call-graph.svg)](https://pypi.org/project/cmd-call-graph/)


A simple tool to generate a call graph for calls within Windows CMD (batch) files.

The tool is available on PyPI: https://pypi.org/project/cmd-call-graph/

It takes the input file as stdin and outputs the resulting file to stdout,
outputting logs and errors to stderr.

Usage example from WSL (Windows Subsystem for Linux):

$ pip install cmd-call-graph
$ cmd-call-graph < your-file.cmd > your-file-call-graph.dot 2>log

The resulting `dot` file can be rendered with any `dot` renderer. Example with
graphviz:

$ sudo apt install graphviz
$ dot -Tpng your-file-call-graph.dot > your-file-call-graph.png
$ explorer.exe your-file-call-graph.png

## Example

Here is an example CMD script:

@echo off
call :foo
goto :eof
:bar
echo "in bar"
call :baz
call :baz
:baz
echo "in baz"
:foo
echo "In foo"
goto :bar

This script would generate the following graph:

![call graph](https://github.com/Microsoft/cmd-call-graph/raw/master/examples/example1-noshowall.png)

If the `--show-all-calls` option is set to `True`, then the following graph would be generated:

![call graph showall](https://github.com/Microsoft/cmd-call-graph/raw/master/examples/example1.png)


## Why?
Sometimes legacy code bases may contain old CMD files. This tool allows to
generate a visual representation of the internal calls within the script.

## Contributing

This project welcomes contributions and suggestions. Most contributions require you to agree to a
Contributor License Agreement (CLA) declaring that you have the right to, and actually do, grant us
the rights to use your contribution. For details, visit https://cla.microsoft.com.

When you submit a pull request, a CLA-bot will automatically determine whether you need to provide
a CLA and decorate the PR appropriately (e.g., label, comment). Simply follow the instructions
provided by the bot. You will only need to do this once across all repos using our CLA.

This project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/).
For more information see the [Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/) or
contact [opencode@microsoft.com](mailto:opencode@microsoft.com) with any additional questions or comments.

## Unit tests
Run unit tests from the project root by running:

python -m unittest discover


Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

cmd-call-graph-0.3.tar.gz (6.1 kB view details)

Uploaded Source

Built Distributions

cmd_call_graph-0.3-py3-none-any.whl (7.6 kB view details)

Uploaded Python 3

cmd_call_graph-0.3-py2-none-any.whl (8.9 kB view details)

Uploaded Python 2

File details

Details for the file cmd-call-graph-0.3.tar.gz.

File metadata

  • Download URL: cmd-call-graph-0.3.tar.gz
  • Upload date:
  • Size: 6.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.20.1 setuptools/40.6.2 requests-toolbelt/0.8.0 tqdm/4.28.1 CPython/3.6.6

File hashes

Hashes for cmd-call-graph-0.3.tar.gz
Algorithm Hash digest
SHA256 6d75d28cc803c14b45f424b91f830e2e5752e13728b5b4e41f46c1dabde66d2b
MD5 eb468e806c2204d87d94df530bf0a88a
BLAKE2b-256 41ce48a134ade2dcc7402ddaae56b5cc0c3161abd6dcff72eb9bd98f2a5dd9fe

See more details on using hashes here.

File details

Details for the file cmd_call_graph-0.3-py3-none-any.whl.

File metadata

  • Download URL: cmd_call_graph-0.3-py3-none-any.whl
  • Upload date:
  • Size: 7.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.20.1 setuptools/40.6.2 requests-toolbelt/0.8.0 tqdm/4.28.1 CPython/3.6.6

File hashes

Hashes for cmd_call_graph-0.3-py3-none-any.whl
Algorithm Hash digest
SHA256 ec44f71c293a8dc26db077c3157cdac7fe08e4e112faa9a36859938f03921e43
MD5 2b54a2e8bf9e00f4ed424f26cd490af2
BLAKE2b-256 3ec5ee93f57d8d6e1da8cc0a2ee45214af85e3ab2fca8330d9825bdec1f08255

See more details on using hashes here.

File details

Details for the file cmd_call_graph-0.3-py2-none-any.whl.

File metadata

  • Download URL: cmd_call_graph-0.3-py2-none-any.whl
  • Upload date:
  • Size: 8.9 kB
  • Tags: Python 2
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.20.1 setuptools/40.6.2 requests-toolbelt/0.8.0 tqdm/4.28.1 CPython/3.6.6

File hashes

Hashes for cmd_call_graph-0.3-py2-none-any.whl
Algorithm Hash digest
SHA256 4f24ad6e909215b355433f107390b4ce2b4ac17eca5f3fdee4e0fd04cb3883c4
MD5 1d0cd73f32b1bcc80298fbcfa78345ae
BLAKE2b-256 60bad57eb4a9fa24d45e7ab3d7788792b445c91501352cffcc2c9a6c74b9f741

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page