Diese Batch-Datei gibt einen Build von TEST nach LIVE frei. Ich möchte dieser Datei eine Prüfbeschränkung hinzufügen, die sicherstellt, dass sich in einem bestimmten Ordner ein zugehöriges Release-Dokument befindet.
"C:\Program Files\Windows Resource Kits\Tools\robocopy.exe" "\\testserver\testapp$"
"\\liveserver\liveapp$" *.* /E /XA:H /PURGE /XO /XD ".svn" /NDL /NC /NS /NP
del "\\liveserver\liveapp$\web.config"
ren "\\liveserver\liveapp$\web.live.config" web.config
Ich habe also ein paar Fragen, wie ich das erreichen kann ...
version.txt
Der\\testserver\testapp$
Ordner enthält eine Datei , und der einzige Inhalt dieser Datei ist die Build-Nummer (z. B. 45 - für Build 45). Wie lese ich den Inhalt derversion.txt
Datei in eine Variable in der Batch-Datei?Wie überprüfe ich, ob eine Datei vorhanden ist
\\fileserver\myapp\releasedocs\ {build}.doc
, indem ich die Variable aus Teil 1 anstelle von {build} verwende?
quelle
set
Methode liest nur ungefähr 1024 Zeichen, warum ist das so?cmd
. Es ist eine schreckliche Sprache für zuverlässige Skripte.set /p
ruftcmd!ReadBufFromInput
mit einem dem Stapel zugewiesenen Puffer auf, um 1023 breite Zeichen (2046 Bytes) zu lesen. Es liest 1023 Bytes aus der Datei, wobei 1 Byte pro OEM / ANSI-Zeichen angenommen wird, dekodiert die Datei jedoch mit der aktuellen Codepage, die nicht unbedingt OEM / ANSI ist. Der schlimmste Fall ist die Codepage 65001 und eine Datei mit 4-Byte-UTF-8-Zeichen (z. B. ein altes Skript). Sie erhalten 255 Zeichen sowie ein teilweise dekodiertes Zeichen, das als Ersatzzeichen U + FFFD gespeichert ist.for /f "usebackq" %%x in ("path with spaces.txt") ...
.help for
erwähnt dies übrigens.Sie können mehrere Variablen wie folgt aus einer Datei lesen:
wo param.txt:
quelle
(param.txt)
sollte sein(version.txt)
und es sollte enthaltenBuild=45
%%G
durch%G
mach einfach:
und es wird angezeigt, als ob Sie Folgendes eingegeben haben:
quelle
Um alle Zeilen der Datei in die Variable zu laden, ist eine verzögerte Erweiterung erforderlich. Gehen Sie wie folgt vor:
Es gibt ein Problem mit einigen Sonderzeichen, wenn auch vor allem
;
,%
und!
quelle
set
Ausdruck in doppelte Anführungszeichen setzen, können Probleme mit mindestens einigen Sonderzeichen vermieden werden :set "Build=!Build!%%x"
.set err=
(nächste Zeile)for /f "delims=" %%x in (err.tmp) do set "err=%err% %%x"