Bagaimana saya bisa mengganti "potong" pada command prompt Windows?


4

Saya memiliki direktori dengan satu set subfolder, cocok dengan pola nama, seperti:

sub-123
sub-0815
sub-4711

Di dalam folder ini saya memiliki beberapa file dengan nomor yang sama pada namanya seperti yang ditemukan dalam nama folder. misalnya folder sub-123 berisi file

input-123
output-123

Saya ingin mengulang folder, mengubah direktori kerja ke folder saat ini, dan membuat beberapa pemrosesan dengan set file yang sesuai. Sementara saya bisa mengulangi folder dengan

for /d %%d in (sub-*) do .

Saya perlu bagian dari nama folder, yang cocok dengan tanda bintang, dalam contoh di atas "123". Bagaimana saya bisa mengekstrak 123 dari nama folder dan membangun perintah seperti

cd sub-123
copy input-123 output-123

di dalam file batch Windows-7? Di lingkungan Linux dimungkinkan untuk menggunakan perintah cut atau ekspresi reguler apa pun. Tetapi bagaimana saya harus masuk ke command prompt Windows?

Jawaban:


2

Saya menemukannya sendiri. Perintah yang ditetapkan memiliki substitusi variabel yang ditingkatkan. Tapi itu tidak bisa digunakan di dalam fortubuh itu sendiri. Penting untuk memulai konteks panggilan bacth baru:

for /d %%d in (sub-*) do (
  set item=%%d
  pushd %%d
  call :build
  popd
)
goto :eof

:build
  set item=%item:sub-=%
  copy input-%item% output-%item%
:eof

"Item" tidak persis terbuat dari string yang cocok dengan tanda bintang, tapi itu setara.


1
Anda mungkin melihat ekspansi variabel tertunda dalam bantuan untuk 'mengatur' dan menggunakan! sebagai pengganti% untuk menyiasati kebutuhan akan konteks baru.
— uSlackr

Saya sudah melakukannya dan tidak berhasil. Masalahnya mungkin ekspansi variabel yang diperlukan, yang tidak bekerja dengan variabel! sintaksis. Anda mungkin membuktikan ini dan mengoreksi saya ketika Anda berhasil.
— pemain harpa

1

Saya juga menemukan jawaban langsung. Ini dekat dengan semantik potong.

Perintah yang ditetapkan juga memiliki sintaksis substring. Untuk melewati dan menggunakan karakter %variable:~n%. Untuk mendapatkan n karakter mulai dari offset k gunakan%variable:~k,n%

for /d %%d in (sub-*) do (
  set item=%%d
  set num=%item:~4%
  pushd %%d
  copy input-%num% output-%num%
  popd
)
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.