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?

pemain harpa
sumber

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.

pemain harpa
sumber
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
)
pemain harpa
sumber