Suchen Sie nach einem Programm oder Befehlszeilentool zum Erstellen dynamischer Ordnervorlagen

Ich mache Webentwicklung und verwende ein neues Modulsystem. Immer wenn ich ein neues Modul erstelle, muss ich eine Ordner- und Dateistruktur neu erstellen. Ich habe dazu eine Batch-Datei geschrieben, die ziemlich gut funktioniert, aber ich möchte auch den Dateiinhalt basierend auf dem Namen des Moduls ändern. Also zum Beispiel möchte ich in der Lage sein, einen Befehl wie diesen auszuführen:

createTemplate my-template new-module

und lassen Sie die folgende Datei-/Ordnerstruktur erstellen:

 /new-module
     /new-module.html
     /new-module.css

Es würde new-module.html aus /my-template/my-template.html kopieren, das auch Variablen wie ${NAME} enthalten kann, die während der Erstellung durch „new-module“ ersetzt würden.

my-template.html könnte beispielsweise so aussehen:

<html>
  <body>
    <div>This is the <b>${NAME}</b> template</div>
  </body>
</html>

Was, wenn es als Vorlage angewendet und im Browser angezeigt wird, einfach so aussehen würde:

Dies ist die Vorlage für neue Module

Antworten (2)

Aus den in Ihren Beispielen verwendeten "Schrägstrichen" gehe ich davon aus, dass Sie nach einer Linux/Unix-Lösung suchen. Die Software wird dort mit dem Betriebssystem geliefert und heißt "Shell" :) Der folgende Einzeiler erledigt diese Aufgabe in Bash:

alias createTemplate="mkdir /${2}; cp /${1}/my-module.html /${2}/${2}.html; cp /${1}/my-module.css /${2}/${2}.css"

Natürlich könnten Sie es auch in ein Shell-Skript einbauen, das Sie nennen createTemplate, und es etwas leichter lesbar machen:

#!/bin/bash
# Initializing new module
template="$1"  # first parameter defines the template
module="$2"    # second parameter is the name of the new module

mkdir /${module}
cp /${template}/my-module.html /${module}/${module}.html
cp /${template/my-module.css /${module}/${module}.css

echo "Directory for module ${module} initialized."

Erweitern Sie nach Bedarf mit mehr Variablen :) Für Hilfe zu Details mit Bash-Skripten können Sie unsere Schwesterseite Super User besuchen .

Mist, ich habe vergessen, OS zu sagen, sorry. Es sind Fenster. Ich habe tatsächlich eine Batch-Datei geschrieben, die im Grunde das tut, was Sie vorgeschlagen haben. Ich werde posten, wenn ich nach Hause komme.
Unter Windows sollte PowerShell in der Lage sein, ähnliche Dinge zu tun. Aber sicher kann ich es nicht sagen. Dieses Batch-Zeug unter Windows hat mich immer verrückt gemacht ;) Und ja, das Raten war schwer: Schrägstriche wiesen auf Linux hin, ebenso wie ${NAME}(sieht aus wie Bash-Syntax). Nur der Begriff "Batch-Datei" war da etwas "out of sync" ;)

Folgendes habe ich mir ausgedacht: https://github.com/ScottBeeson/polyclone

Es war ursprünglich Polymer-spezifisch, ist es aber nicht mehr. Ich sollte das Repo umbenennen. Hier ist der vollständige Code:

@echo off &setlocal
set /p seed= Enter Template Folder:
set /p target= Enter New Name
@echo Creating new element named "%target%"
echo Creating Folder...
md %target%

for %%i in (%seed%\*.*) do (
    set "filename=%%~ni"
    set ex=%%~xi

    if %seed%==%%~ni (
        call:WriteFile %seed%\%%~ni%%~xi %target%\%target%%%~xi
    ) else (
        call:WriteFile %seed%\%%~ni%%~xi %target%\%%~ni%%~xi
    )
)


GOTO:EOF

:WriteFile
echo Writing %~1 to %~2
set "search=${NAME}"
set "replace=%target%"
set "textfile=%~1"
set "newfile=%~2"


(for /f "delims=" %%i in ('findstr /n "^" "%textfile%"') do (
    set "line=%%i"
    setlocal enabledelayedexpansion
    set "line=!line:%search%=%replace%!"
    echo(!line!
    endlocal
))>"%newfile%"

GOTO:EOF

:EOF
echo Done!

Derzeit wird nur eine Variable zum Ersetzen unterstützt. Ich möchte dies erweitern, um aus einer Art Eingabedatei zu lesen, in der Sie mehrere Variablen Zeichenfolgen zum Ersetzen zuordnen können.

Im Moment müssen Sie nur „polyclone.bat“ an einer Eingabeaufforderung ausführen und Sie werden aufgefordert, den Vorlagenordner und den Zielordner anzugeben. Es verarbeitet dann die Vorlage und schreibt jede Datei, wobei jede Instanz von ${NAME} durch den angegebenen Zielnamen ersetzt wird.

Auch noch keine Unterstützung für Unterordner. Aber es tut genau das, was ich für meine aktuelle Situation brauche.