Ten plik wsadowy zwalnia kompilację z TEST do LIVE. Chcę dodać ograniczenie sprawdzające w tym pliku, które zapewni, że w określonym folderze znajduje się towarzyszący dokument wersji.
"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
Mam więc kilka pytań, jak to osiągnąć ...
W folderze znajduje się
version.txt
plik\\testserver\testapp$
, a jedyną zawartością tego pliku jest numer kompilacji (na przykład 45 - dla kompilacji 45) Jak wczytać zawartośćversion.txt
pliku do zmiennej w pliku wsadowym?Jak sprawdzić, czy plik
\\fileserver\myapp\releasedocs\ {build}.doc
istnieje, używając zmiennej z części 1 zamiast {build}?
źródło
set
Metoda czyta tylko około 1024 znaków, to dlaczego?cmd
. To okropny język dla wiarygodnych skryptów.set /p
wywołujecmd!ReadBufFromInput
bufor przydzielony na stosie w celu odczytania 1023 szerokich znaków (2046 bajtów). Odczytuje 1023 bajty z pliku, zakładając 1 bajt na znak OEM / ANSI, ale dekoduje plik przy użyciu bieżącej strony kodowej, która niekoniecznie jest OEM / ANSI. Najgorszym przypadkiem jest strona kodowa 65001 i plik wypełniony 4-bajtowymi znakami UTF-8 (np. Starożytny skrypt). Otrzymasz 255 znaków plus częściowo zdekodowany znak przechowywany jako znak zastępczy, U + FFFD.for /f "usebackq" %%x in ("path with spaces.txt") ...
.help for
wspomina o tym, nawiasem mówiąc.Możesz odczytać wiele zmiennych z pliku w następujący sposób:
gdzie param.txt:
źródło
(param.txt)
powinno być(version.txt)
i powinno zawieraćBuild=45
%%G
z%G
po prostu zrób:
i będzie wyświetlany tak, jakbyś wpisał:
źródło
Aby załadować wszystkie wiersze pliku do zmiennej, potrzebne jest opóźnione rozwinięcie, więc wykonaj następujące czynności:
Jest problem z niektórych znaków specjalnych, choć przede wszystkim
;
,%
i!
źródło
set
ekspresję wewnątrz podwójnych cudzysłowów mógł uniknąć problemów z przynajmniej niektórych znaków specjalnych:set "Build=!Build!%%x"
.set err=
(następna linia)for /f "delims=" %%x in (err.tmp) do set "err=%err% %%x"