File batch ini merilis build dari TEST ke LIVE. Saya ingin menambahkan batasan periksa dalam file ini yang memastikan ada dokumen rilis yang menyertainya dalam folder tertentu.
"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
Jadi saya punya beberapa pertanyaan tentang bagaimana mencapai ini ...
Ada
version.txt
file di\\testserver\testapp$
folder, dan satu-satunya isi file ini adalah nomor build (misalnya, 45 - untuk build 45) Bagaimana cara membaca kontenversion.txt
file menjadi variabel dalam file batch?Bagaimana cara memeriksa apakah file,,
\\fileserver\myapp\releasedocs\ {build}.doc
ada menggunakan variabel dari bagian 1 sebagai pengganti {build}?
sumber
set
Metode hanya membaca tentang 1024 karakter, mengapa demikian?cmd
. Ini adalah bahasa yang mengerikan untuk skrip yang andal.set /p
panggilancmd!ReadBufFromInput
dengan buffer yang dialokasikan untuk membaca 1023 karakter lebar (2046 bytes). Bunyinya 1023 byte dari file, dengan asumsi 1 byte per karakter OEM / ANSI, tapi itu decode file menggunakan codepage saat ini, yang belum tentu OEM / ANSI. Kasing terburuk adalah codepage 65001 dan file diisi dengan 4-byte karakter UTF-8 (misalnya naskah kuno). Anda akan mendapatkan 255 karakter, ditambah karakter yang diterjemahkan sebagian yang disimpan sebagai karakter pengganti, U + FFFD.for /f "usebackq" %%x in ("path with spaces.txt") ...
.help for
menyebutkan ini, omong-omong.Anda dapat membaca banyak variabel dari file seperti ini:
di mana param.txt:
sumber
(param.txt)
harus(version.txt)
dan itu harus berisiBuild=45
%%G
dengan%G
kerjakan saja:
dan itu akan ditampilkan seolah-olah Anda mengetik:
sumber
Untuk mendapatkan semua baris file dimuat ke dalam variabel, Perluasan Tertunda diperlukan, jadi lakukan hal berikut:
Ada masalah dengan beberapa karakter khusus, meskipun terutama
;
,%
dan!
sumber
set
ekspresi dalam tanda kutip ganda bisa menghindari masalah dengan setidaknya beberapa karakter khusus:set "Build=!Build!%%x"
.set err=
(baris berikutnya)for /f "delims=" %%x in (err.tmp) do set "err=%err% %%x"