Fitur tersembunyi dari file batch Windows


232

Apa saja yang kurang diketahui, tetapi fitur penting dan berguna dari file batch Windows?

Pedoman:

  • Satu fitur per jawaban
  • Berikan deskripsi singkat tentang fitur dan contohnya , bukan hanya tautan ke dokumentasi
  • Batasi jawaban untuk fungsi asli , yaitu, tidak memerlukan perangkat lunak tambahan, seperti Windows Resource Kit

Klarifikasi: Kami merujuk ke skrip yang diproses oleh cmd.exe, yang merupakan default pada varian WinNT.

(Lihat juga: file batch Windows: .bat vs .cmd? )

Jawaban:


185

Kelanjutan garis:

call C:\WINDOWS\system32\ntbackup.exe ^
    backup ^
    /V:yes ^
    /R:no ^
    /RS:no ^
    /HC:off ^
    /M normal ^
    /L:s ^
    @daily.bks ^
    /F daily.bkf

2
Saya mencari ini minggu lalu! (tidak ingat karakternya)
chilltemp

21
^ Sebenarnya adalah kutipan char. Dengan menggunakannya, Anda dapat mengutip <dan> sehingga mereka tidak mengarahkan output. ^ Pada akhir garis juga memungkinkan kelanjutan garis.
Cheeso

Bisakah Anda jelaskan scriptlet kecil ini?
guerda

2
@furtelwart: ini adalah sama seperti jika Anda menulis semua ke dalam satu baris: call C:\WINDOWS\system32\ntbackup.exe backup /V:yes /R:no /RS:no /HC:off /M normal /L:s @daily.bks /F daily.bkf. Dan untuk memahami semua parameter dari baris itu, jalankan saja C:\WINDOWS\system32\ntbackup.exe /?.
Kurt Pfeifle

Diskusi mendalam tentang topik ini, pada perintah panjang dibagi atas beberapa baris
1111

150
PUSHD path

Membawa Anda ke direktori yang ditentukan oleh jalur .

POPD

Membawa Anda kembali ke direktori tempat Anda "mendorong".


5
Ini juga berfungsi sebagai tumpukan penuh, sehingga Anda dapat mendorong banyak direktori ke tumpukan, dan kemudian terus muncul untuk kembali ke tempat Anda sebelumnya.
Kibbee

Serius? Bagaimana saya belum pernah mendengar fitur ini sebelumnya?
Josh Hinman

4
Jalankan 'cmd.exe' lalu ketik 'help', lalu ketik 'help pushd' atau 'pushd /?'.
paxdiablo

86
Jika Anda mendorong ke jalur UNC, itu akan secara otomatis memetakan drive untuk Anda dan popd akan memetakannya.
Ferruccio

2
+1 terutama untuk kemampuan UNC, Anda harus menambahkannya ke jawaban Anda.
Adam Mitz

109

Tidak yakin seberapa berguna ini dalam file batch , tetapi ini adalah perintah yang sangat nyaman untuk digunakan dalam command prompt:

C:\some_directory> start .

Ini akan membuka Windows Explorer di folder "some_directory".

Saya telah menemukan ini penghemat waktu yang hebat.


1
baik, saya menggunakannya juga. Saya memiliki file "open.cmd" di salah satu direktori PATH, dan satu-satunya dalam file itu adalah "@start." ;)
Paulius

5
'explorer' juga melakukan hal yang sama dengan 'start' C: \ some_directory> explorer.
Ray

1
Saya cenderung mengetik ini sebagai [mulai "". ] (tanda kurung untuk kejelasan) karena mulai kadang-kadang rewel tentang param pertama menjadi judul.
system PAUSE

1
Jika Anda menggunakan Mac, open .lakukan hal yang sama.
Hibah Paul

1
starttidak lebih dari sekadar membuka folder saat ini. Anda dapat mengirimkan file apa pun dan itu akan membukanya dengan penampil yang dikonfigurasi. Berikan URL dan peramban default Anda terbuka, dll ...
idbrii

87

Saya selalu kesulitan membaca komentar yang ditandai oleh kata kunci di setiap baris:

REM blah blah blah

Lebih mudah dibaca:

:: blah blah blah

8
Saya mendengar :: lebih efisien daripada REM karena REM mencoba melakukan ekspansi variabel lingkungan pada hal-hal yang terjadi setelahnya, tetapi :: tidak.
Scott Langham

47
Faktanya, :: hanyalah label dengan nama yang lucu; karenanya, :: tidak akan berfungsi jika Anda menggunakannya di dalam blok (dalam tanda kurung) karena label juga tidak diperbolehkan. REM bekerja di sana tentunya.
mihi

Perhatikan bahwa itu remadalah kata kunci yang terdokumentasi sementara ::hanya detail implementasi. Meskipun tidak mungkin yang ::akan berhenti bekerja, umumnya disarankan untuk tidak mengandalkan perilaku tidak berdokumen.
Joey

Anda bahkan dapat menggunakan goto :untuk melompat ke label. :-)dan goto -)juga akan bekerja.
Sven Marnach

79

Substring variabel:

> set str=0123456789
> echo %str:~0,5%
01234
> echo %str:~-5,5%
56789
> echo %str:~3,-3%
3456

3
Jelek, tapi sangat berguna!
guerda

1
@furtelwart terdengar seperti itu bisa menjadi moto kumpulan
rzrgenesys187

ini hebat untuk memformat tanggal (namun masalah yang saya temukan adalah bahwa vista / 7 dan xp keluaran DATE berbeda)
Daniel

Perhatikan bahwa sayangnya, ini tidak dapat digabungkan dengan variabel lokal loop FOR ( for %a in ...) karena mereka tidak memerlukan tanda persentase penutupan seperti halnya variabel lingkungan; Anda harus terlebih dahulu menetapkannya ke variabel lingkungan (menggunakan ekspansi yang tertunda!) dan kemudian mengekstraksi substring.
RolKau

Ini adalah hal buruk yang tak terhindarkan jika Anda ingin melakukan sesuatu dengan tanggal (mis. Nama file cadangan). Setelah menyaksikan keburukan umum dari baris perintah Windows, saya melihat mengapa Windows sebagian besar menunjuk & klik :) Meskipun mereka mengatakan bahwa PowerShell baru lebih baik.
Halil Özgür

72

Perintah UNTUK ! Sementara saya benci menulis file batch, saya berterima kasih untuk itu.

FOR /F "eol=; tokens=2,3* delims=, " %i in (myfile.txt) do @echo %i %j %k

akan mengurai setiap baris di myfile.txt, mengabaikan garis yang dimulai dengan titik koma, meneruskan token ke-2 dan ke-3 dari setiap baris ke badan, dengan token yang dibatasi oleh koma dan / atau spasi. Perhatikan referensi pernyataan tubuh% i untuk mendapatkan token ke-2,% j untuk mendapatkan token ke-3, dan% k untuk mendapatkan semua token yang tersisa setelah ke-3.

Anda juga dapat menggunakan ini untuk beralih ke direktori, konten direktori, dll ...


4
Saya telah menemukan file batch 'UNTUK loop terbatas dan mengerikan untuk ditulis, tetapi kadang-kadang berguna.
ya23

2
Maaf kebingungan saya, tapi bagaimana ini kurang dimanfaatkan? Saya pikir jika Anda tidak tahu UNTUK loop, Anda tidak tahu batch scripting.
Coding With Style

11
Kurang dimanfaatkan atau tidak, itu adalah siksaan. (Beberapa orang akan berdebat kejahatan yang diperlukan.)
harpo

Saya harus menggunakannya beberapa kali dan orang yang mengarang sintaksis ini harus dipecat. Dari meriam. Ke dalam matahari. Itu buruk.
VitalyB

1
@CodingWithStyle: Setiap kali saya harus menulis untuk loop dalam file batch, skrip menjadi bash launcher dan menulis ulang skrip dalam bash (atau python) sebagai gantinya
:)

60

Daripada membuang sampah skrip dengan REM atau :: lines, saya melakukan hal berikut di bagian atas setiap skrip:

@echo OFF
goto :START

Description of the script.

Usage:
   myscript -parm1|parm2 > result.txt

:START

Perhatikan bagaimana Anda dapat menggunakan karakter pipa dan redirection tanpa menghindarinya.


3
Akan lebih keren lagi jika Anda memeriksa% 1 untuk "/?" dan kemudian Anda bisa menggema bagian itu sebagai teks bantuan.
demoncodemonkey

6
Hmm, pemrograman batch melek ?!
Muhammad Alkarouri

54

Path (with drive) di mana skrip berada: ~ dp0

set BAT_HOME=%~dp0
echo %BAT_HOME%
cd %BAT_HOME%

Saya biasanya menggunakan% CD% untuk ini. Mungkin tidak tersedia di semua versi shell DOS?
Saul Dolgin

11
% CD% adalah direktori saat ini sementara% ~ dp0 adalah direktori di mana skrip berjalan berada.
RealHowTo

Juga, saya tidak berpikir% CD% ada sebelum ... XP, mungkin. Saya tahu beberapa versi Windows yang lebih lama tidak memilikinya.
Thomas Owens

1
Anda sebaiknya menggunakan cd / d% BAT_HOME% sebagai gantinya, jika bat berada di drive lain. Jika saya ingat dengan benar, ini tidak akan bekerja dengan DOS yang lebih lama.
ketorin

cd atau pushd% BATH_HOME% tidak akan berfungsi jika Anda menjalankan batch pada jalur jaringan.
Benoit

49

Sepotong% ~ dp0 telah disebutkan, tetapi sebenarnya ada lebih dari itu: karakter setelah ~ mendefinisikan informasi yang diekstraksi.
Tidak ada huruf yang menghasilkan kembalinya nama file tambalan
d - mengembalikan huruf
p drive - mengembalikan jalur
s - mengembalikan jalur pendek
x - mengembalikan ekstensi file
Jadi jika Anda menjalankan skrip test.bat di bawah ini dari c: \ Temp \ nama dir panjang \ folder,

@echo off
echo %0
echo %~d0
echo %~p0
echo %~dp0
echo %~x0
echo %~s0
echo %~sp0

Anda mendapatkan output berikut

test
c:
\Temp\long dir name\
c:\Temp\long dir name\
.bat
c:\Temp\LONGDI~1\test.bat
\Temp\LONGDI~1\

Dan jika suatu parameter diteruskan ke skrip Anda seperti dalam
pengujian c: \ temp \ mysrc \ test.cpp
manipulasi yang sama dapat dilakukan dengan variabel% 1.

Tetapi hasil perluasan% 0 tergantung pada lokasi!
Pada "tingkat atas" dari batch itu diperluas ke nama file batch saat ini.
Dalam suatu fungsi (panggilan), itu mengembang ke nama fungsi.

@echo off
echo %0
call :test
goto :eof

:test
echo %0
echo %~0
echo %~n0

Outputnya adalah (file batch dimulai dengan myBatch.bat)

myBatch.bat
:test
:test
myBatch

43

Dengan menggunakan CALL, EXIT / B, SETLOCAL & ENDLOCAL Anda dapat mengimplementasikan subrutin dengan variabel lokal.

contoh:

@echo off

set x=xxxxx
call :sub 10
echo %x%
exit /b

:sub
setlocal
set /a x=%1 + 1
echo %x%
endlocal
exit /b

Ini akan dicetak

11
xxxxx

meskipun: sub memodifikasi x.


6
Anda sebaiknya menggunakan goto: eof daripada exit / b, melakukan hal yang sama tetapi merupakan cara yang lebih standar untuk melakukannya.
Philibert Perusse

2
Ada standar untuk ini? O_o
Paulius

3
Kesalahanku. Saya pikir Anda bermaksud secara eksplisit mendefinisikan: label eof dan melakukan kebalikannya. Saya tidak menyadari ada label implisit: eof di akhir setiap file batch.
Ferruccio

3
Namun, jika Anda ingin subrutin mengatur tingkat kesalahan, Anda harus menggunakan exit / b. Sebagai contoh: exit / b 3
Chris Noe

6
Saya telah menemukan yang terbaik untuk menggunakan "keluar / B" daripada "goto: eof" untuk kembali dari subrutin, "goto: eof" memiliki masalah bahwa Anda dapat mengembalikan kode kesalahan ketika Anda ingin menelannya. Sebagai contoh jika Anda menggunakan "jika ada gema someFile ada di sini", ini akan mengatur tingkat kesalahan jika someFile tidak ada, tapi itu tidak salah, dan bukan kode kesalahan yang ingin Anda kembalikan (itulah yang " goto: eof "akan lakukan).
Scott Langham

42

Trik licik untuk menunggu N detik (bukan bagian dari cmd.exe tetapi bukan perangkat lunak tambahan karena dilengkapi dengan Windows), lihat garis ping. Anda membutuhkan N + 1 ping sejak ping pertama keluar tanpa penundaan.

    echo %time%
    call :waitfor 5
    echo %time%
    goto :eof
:waitfor
    setlocal
    set /a "t = %1 + 1"
    >nul ping 127.0.0.1 -n %t%
    endlocal
    goto :eof

2
Bahkan yang lebih baik adalah meletakkan ini dalam file seperti sleep.bat untuk menyelamatkan Anda dari kesulitan menulis ulang berulang kali.
erjiang

1
... dan letakkan sleep.bat di beberapa direktori dalam variabel lingkungan PATH
Scoregraphic

Saya menentang menempatkan ini di luar, membuat lebih mudah dibawa ... di sistem Windows.
sorin

37

Melarikan diri dari "pipa ledeng":

echo ^| ^< ^> ^& ^\ ^^

3
Saya berani bertaruh karakter DOS escape tidak dikenal. Bagus
Joshua

12
Ah, itu akan menjelaskan mengapa itu adalah operator kelanjutan garis - itu lolos dari baris baru, seperti \ in bash ...
leander

@leander: Ya, tapi itu hanya bisa lepas dari LF (dan bukan CR), karena semua CR dihapus sebelum
jeb

Jadi inilah mengapa menggunakan git pada Windows untuk melakukan diff terhadap commit sebelumnya ( HEAD^) bermasalah.
Daniel Trebbien

31

Mampu menjalankan perintah dan memproses output (seperti backticks '$ ()' di bash).

for /f %i in ('dir /on /b *.jpg') do echo --^> %i

Jika ada spasi dalam nama file, gunakan ini:

for /f "tokens=*" %i in ('dir /on /b *.jpg') do echo --^> %i

2
Tidak bekerja dengan nama file yang memiliki spasi di namanya ... Ini berfungsi: untuk / f "token = *"% i in ('dir / on / b * .jpg') do echo - ^>% i
doekman

Tangkapan yang bagus. Secara pribadi saya pikir spasi dalam nama file adalah hal-hal mengerikan yang mengerikan dari kedalaman lingkaran kesembilan Neraka. Tapi kita harus melayani mereka, kurasa.
paxdiablo

Itu sintaks paling gila yang pernah saya lihat. Apakah ini berfungsi jika Anda membuat backtick.bat ini dan meneruskannya?
idbrii

30

Membuat file kosong:

> copy nul filename.ext

6
@devio: gema. menempatkan garis kosong. jadi file tidak akan kosong!
Paulius

4
Saya gunakan type nul > filename.extuntuk itu.
Benoit

Bagus saya bertanya-tanya apakah ada sentuhan setara untuk waktu yang lama.
jdelator

Saya selalu menggunakanren > blah.txt
Synetech

28

Untuk menyembunyikan semua output dari perintah redirect ke> nul 2> & 1.

Misalnya, beberapa program baris perintah menampilkan output bahkan jika Anda mengarahkan ke> nul. Tetapi, jika Anda mengarahkan output seperti baris di bawah ini, semua output akan ditekan.

PSKILL NOTEPAD >nul 2>&1

EDIT: Lihat Mengabaikan output dari perintah untuk penjelasan tentang cara kerjanya.


1
Apakah Anda tahu cara kerjanya? Apa arti dari bit 2> & 1?
Scott Langham

12
> Nul mengalihkan STDOUT ke nul. 2> & 1 mengarahkan ulang STDERR ke mana pun STDOUT menunjuk.
aforia

Secara khusus, saya pikir 2> & 1 adalah "clone filehandle", pengaturan STDERR ke klon STDOUT. Menempatkannya setelah> NUL itu penting, karena Anda ingin mengkloning STDOUT setelah dialihkan, bukan sebelumnya. (Tolong perbaiki saya jika saya salah di sini.)
leander

1
Bagi Anda yang bertanya-tanya dari mana PSKILL berasal, lihat sysinternals.com . Jika Anda menggunakan edisi Pro, Anda harus memiliki perintah TSKILL asli yang kurang lebih sama.
Coding With Style

1
Jika Anda tidak memiliki pskill atau tskill, sebagian besar sistem Windows yang saya gunakan disertakan taskkill.
idbrii

25
PAUSE

Menghentikan eksekusi dan menampilkan prompt berikut:

Tekan tombol apa saja untuk melanjutkan . . .

Berguna jika Anda ingin menjalankan batch dengan mengklik dua kali di Windows Explorer dan ingin benar-benar melihat output daripada hanya sekejap dari jendela perintah.


Saya hampir tidak akan menyebut ini "kurang dimanfaatkan" karena saya menandainya di akhir setiap naskah yang saya tulis. Kemudian lagi, itu tidak berfungsi dengan baik ketika Anda ingin memiliki IDE Anda menjalankan skrip dan menangkap output, karena IDE tidak memiliki cara untuk menekan enter untuk Anda biasanya ...
Nicholas Flynt

15
Salah satu fitur "jeda" yang rapi adalah jika tidak ada terminal di sekitar untuk menerima "kunci apa saja" (misalnya jika file batch Anda dijalankan dari layanan sistem), ia mendeteksi ini dan terus berjalan ...
leander

4
+1 untuk Charlie Somerville, ini sangat dikenal setiap programmer game 'go.bat' menggunakannya kembali di awal 90-an.
LiraNuna

6
Alih-alih mencemari semua file batch Anda (dan membuatnya menjengkelkan untuk digunakan untuk CLI geeks), Anda bisa menggunakan Start / Run / lalu ketik 'cmd / k' dan nama file batch. ATAU ubah string default HKCR \ batfile \ shell \ open \ menjadi 'cmd / k "% 1"% *'. ATAU buat batchfile lain yang hanya menjalankan '@cmd / k $ *', letakkan di desktop dan letakkan file batch Anda di atasnya. Ada banyak alternatif untuk PAUSE. Silakan pertimbangkan mereka.
system PAUSE

1
@gnud: Anda masih dapat menyalurkan ke skrip: echo.|batch-with-pause.batakan memiliki efek yang sama dengan menekan 'sembarang tombol' ...
Kurt Pfeifle

25

Setara dengan bash (dan kerang lainnya)

echo -n Hello # or
echo Hello\\c

yang menghasilkan " Hello" tanpa baris baru. Peretasan cmd untuk melakukan ini:

<nul set /p any-variable-name=Hello

set /padalah cara untuk meminta input dari pengguna. Itu memancarkan string yang diberikan dan kemudian menunggu, (pada baris yang sama, yaitu, tidak ada CRLF), bagi pengguna untuk mengetik respons.

<nulcukup mengirimkan respons kosong ke set /pperintah, sehingga hasil bersih adalah string prompt yang dipancarkan. (Variabel yang digunakan tetap tidak berubah karena respons kosong.)

Masalahnya adalah: Tidak mungkin untuk menghasilkan tanda sama dengan yang terdepan, dan pada Vista karakter spasi putih terkemuka dihapus, tetapi tidak pada XP.


18

Cari dan ganti ketika mengatur variabel lingkungan:

> @set fname=%date:/=%

... menghapus "/" dari tanggal untuk digunakan dalam nama file timestamped.

dan substring juga ...

> @set dayofweek=%fname:~0,3%

17

Aritmatika bilangan bulat:

> SET /A result=10/3 + 1
4

Berapa lama SET memiliki kemampuan untuk menghitung? Windows XP?
chakrit

1
Jika Anda bertanya seberapa besar nilainya, saya yakin ini 32-bit. Jadi +/- 2 miliar.
Chris Noe

1
Saya pikir pertanyaannya adalah, berapa lama SET mampu menghitung? Sejak Windows XP?
Michael Myers

3
SET SET CMD.EXE saya sudah bisa menghitung sejak NT 3.1 atau lebih. Itu hanya butuh waktu lama bagi siapa pun untuk melihat bahwa CMD.EXE tidak persis sama dengan COMMAND.COM ...
RBerteig

16

Pemisah perintah:

cls & dir
copy a b && echo Success
copy a b || echo Failure

Pada baris ke-2, perintah setelah && hanya berjalan jika perintah pertama berhasil.

Pada baris ke-3, perintah setelah || hanya berjalan jika perintah pertama gagal.



15

Anda dapat membuat pernyataan jika mendapatkan efek seperti boolean `dan 'hubungan pendek.

if foo if bar baz

1
Ini benar-benar hanya jalan pintas untuk bersarang: if foo ( if bar ( baz ) )(Bayangkan baris baru setelah tanda kurung.)
idbrii

14

Untuk dengan cepat mengkonversi file teks Unicode (16bit / char) ke file ASCII DOS (8bit / char).

C:\> type unicodeencoded.txt > dosencoded.txt

sebagai bonus, jika memungkinkan, karakter dipetakan dengan benar.


1
Itu file ANSI DOS - ASCII adalah 7bit / char.
MarkJ

Lol, ini anti-pola, konversi ini kemungkinan besar akan gagal. Pengkodean hanya 8 bit yang mendukung Unicode menjadi UTF-8 tetapi berkat M $ Anda tidak dapat memiliki codepage UTF-8 yang diatur pada Windows.
sorin

14

jika struktur blok:

if "%VS90COMNTOOLS%"=="" (
  echo: Visual Studio 2008 is not installed
  exit /b
)

3
Selama Anda menyadari bahwa variabel akan diperluas semuanya sekaligus (tanpa ekspansi tertunda) - artinya Anda tidak dapat menggunakan% ERRORLEVEL% secara masuk akal di sana.
Duncan Smart

Anda juga tidak dapat menggunakan label di sana (yang termasuk komentar :: style) karena akan mengakhiri pernyataan if secara prematur.
Coding With Style

2
@Uncunc: Anda tidak harus menggunakan pseudo-variable %ERRORLEVEL%; itu untuk apa if errorlevel <foo>. Dan itu sebenarnya bekerja di blok tersebut.
Joey

12

Ekspansi variabel yang tertunda (dengan substring dimasukkan untuk mengukur dengan baik):

    @echo off
    setlocal enableextensions enabledelayedexpansion
    set full=/u01/users/pax
:loop1
    if not "!full:~-1!" == "/" (
        set full2=!full:~-1!!full2!
        set full=!full:~,-1!
        goto :loop1
    )
    echo !full!
    endlocal

12

Tidak menyediakan banyak fungsionalitas, tetapi Anda dapat menggunakan perintah judul untuk beberapa penggunaan, seperti memberikan status pada skrip panjang di bilah tugas, atau hanya untuk meningkatkan umpan balik pengguna.

@title Searching for ...
:: processing search
@title preparing search results
:: data processing

2
Menarik. Meskipun setelah itu Anda tampaknya kehilangan fitur reguler, yaitu untuk menunjukkan perintah yang sedang berjalan. Apakah ada cara untuk mengatur ulang itu?
Chris Noe

2
technet.microsoft.com/en-us/library/bb491017.aspx mengatakan itu dapat diatur ulang dengan "title" sendiri, tetapi ini sepertinya tidak berfungsi pada Windows 7 ...
ℳ.

11

Tidak memiliki editor yang praktis dan perlu membuat file batch?

copy con test.bat

Cukup ketikkan perintah, tekan enter untuk baris baru. Tekan Ctrl-Z dan Enter untuk menutup file.


4
Heh, itu membawaku kembali.
Coding With Style

11

contoh pengurangan string pada datedan timeuntuk mendapatkan file bernama "YYYY-MM-DD HH: MM: SS.txt"

echo test > "%date:~0,4%-%date:~5,2%-%date:~8,2% %time:~0,2%_%time:~3,2%_%time:~6,2%.txt"

Saya gunakan coloruntuk menunjukkan apakah skrip saya berhasil, gagal, atau butuh input dengan mengubah warna teks dan latar belakang. Ini sangat membantu ketika Anda memiliki beberapa mesin dalam jangkauan pandangan Anda tetapi cukup jauh

warna XY

di mana X dan Y adalah nilai hex dari 0ke F, di mana X - background, Y - text, ketika X = Y warna tidak akan berubah.

warna Z

mengubah warna teks menjadi 'Z' dan menetapkan latar belakang hitam, 'warna 0' tidak akan berfungsi

untuk nama panggilan warna

warna?


diedit; _ ditafsirkan sebagai huruf miring. Sedikit kode yang bagus.

@Duncan Smart: tidak benar, juga berfungsi di Inggris UK (walaupun secara teknis itu harus "warna", grrr)
demoncodemonkey

10

Kontrol total atas keluaran dengan karakter spasi dan pelarian .:

echo.    ^<resourceDir^>/%basedir%/resources^</resourceDir^>

1
Bagaimana cara kerjanya? Titik membatasi batas awal output teks?
Chris Noe

3
"echo. x" akan menampilkan "<spasi> x", "echo x" hanya akan menampilkan "x". Ini memungkinkan ruang terdepan. Selain itu, karakter pelarian "^" akan mencegah cmd dari memikirkan semua karakter "<" dan ">" tersebut sebagai pengalihan I / O.
paxdiablo

1
gema (lebih baik, karena gema. Membuat pencarian file untuk file bernama "gema" jika file ini ada gema. gagal, jika tidak maka gema internal dieksekusi, tetapi lebih lambat dari gema (
jeb

9

TheSoftwareJedi sudah menyebutkan perintah untuk, tapi saya akan menyebutkannya lagi karena sangat kuat.

Output berikut tanggal saat ini dalam format YYYYMMDD, saya menggunakan ini saat membuat direktori untuk cadangan.

for /f "tokens=2-4 delims=/- " %a in ('DATE/T') do echo %c%b%a

2
Tentunya DATE / T mengembalikan 29/10/2008 di Eropa dan 10/29/2008 di AS ... jadi mungkin diperlukan lokalisasi! ;-)

Betul sekali! Tetapi Anda dapat menyalahgunakan perintah tanggal untuk mengetahui format tanggal mana yang digunakan.
remonedo

4
Ini penggunaan FOR yang berlebihan, imo. Saya pikir saya hanya akan menggunakan% DATE: ~ 10,4 %% DATE: ~ 4,2%% DATE: ~ 7,2% untuk itu daripada menjalankan perintah tanggal lalu parsing melalui untuk.
Coding With Style
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.