Saya ingin memiliki variabel lingkungan yang berisi hari dalam seminggu di cmd.exe.
Ketika saya menjalankan perintah ini, saya mendapatkan hasil yang saya inginkan.
C:\Users\tisc> powershell (get-date).dayofweek
Friday
Di sini saya mencoba menyimpan hasilnya dalam variabel lingkungan.
C:\Users\tisc> set dow = powershell (get-date).dayofweek
Tetapi ketika saya mencoba untuk mendapatkannya saya tidak mendapatkan tali seperti yang saya inginkan.
C:\Users\tisc> set dow
DoW=0
dow = powershell (get-date).dayofweek
Tujuan saya adalah menggunakan variabel dalam file batch untuk beberapa skrip cadangan.
PowerShell -Command $env:Note = 'Elevate'; (New-Object -com 'Shell.Application').ShellExecute('cmd.exe', '/k %*', '', 'runas')
Anda harus menjalankan kedua perintah di PowerShell karena PowerShell lebih dari mampu memanipulasi variabel lingkungan.
Yaitu:
atau
Omong-omong, skrip Anda tidak berfungsi karena semua yang Anda dapatkan adalah kode pengembalian PowerShell, bukan data yang dihasilkannya. Mungkin ada cara untuk membuatnya bekerja, tetapi pada akhirnya tidak ada gunanya dibandingkan dengan hanya menggunakan skrip PowerShell yang tepat.
Untuk kelengkapan, berikut adalah artikel bagus dari Microsoft tentang PowerShell dan variabel lingkungan:
Membuat dan Memodifikasi Variabel Lingkungan
Pembaruan: Setelah meninjau solusi ini dengan @ syneticon-dj dalam obrolan, tampaknya masalah yang Anda hadapi menggunakan metode ini adalah bahwa prompt perintah harus dimuat ulang sebelum akan mencerminkan perubahan dalam variabel lingkungan yang telah terjadi secara eksternal.
Anda belum memberikan banyak detail tentang apa yang Anda lakukan, tetapi jika ini adalah satu-satunya alasan Anda meluncurkan PowerShell, daripada saran saya yang sebenarnya adalah untuk meninjau bagaimana Anda melakukan sesuatu.
Apakah seluruh proses Anda menggunakan PowerShell atau sudahkah Anda mempertimbangkan untuk menggunakan tugas terjadwal? Anda dapat menjadwalkan tugas berdasarkan pada hari dalam seminggu.
sumber
Saya percaya pengaturan variabel lingkungan dari dalam PowerShell dengan
[Environment]::SetEnvironmentVariable
seperti yang disarankan oleh Dan tidak ada gunanya, karena Anda akan kehilangan konten variabel saat penghentian PowerShell jika Anda memilih konteks "proses" sementara atau tidak akan memilikinya dalam lingkungan file batch Anda belum jika Anda memilih konteks "mesin" atau "pengguna" permanen - yaitu, kecuali seluruh skrip Anda ditulis dalam PowerShell, di mana masalahnya tidak akan muncul di tempat pertama:Anda bisa menggunakan
for
perintah sebagai solusi untuk mengurai output perintah PowerShell Anda dan memasukkannya ke dalam variabel:Perhatikan karakter tanda sisipan yang
^
digunakan untuk menghindari karakter khusus kurung dalam panggilan PowerShell Anda.Jika Anda mengujinya dari baris perintah dan bukan dari dalam konteks file batch, Anda perlu mengganti
%%
referensi variabel sebelumnya dengan%
:sumber
[Environment]::SetEnvironmentVariable("DOW", $dow, "user")
dari dalam sesi menjalankan powershell tapi itu tidak ada di sesi cmd orang tua saya setelah penghentian PowerShellSET
di Command Prompt. Coba mulai anakcmd.exe
dan Anda akan melihat hal yang sama. Perilaku yang Anda lihat di PowerShell adalah karena memperbarui variabel lingkungan melalui kelas .NET tidak memengaruhi proses saat ini.Jika itu aku, dan script orang tua memiliki menjadi shell script, aku hanya melakukan doa nakal dari PowerShell dalam naskah cmd seperti:
Anda mungkin perlu memeriksa kebijakan eksekusi PowerShell Anda (cmdlet Set-ExecutionPolicy).
sumber
Atau jika Anda menikah untuk melakukan ini di shell lama, lewati PowerShell sepenuhnya.
Gunakan variabel% date% dan rentangkan hari dari singkatan yang diberikannya (ini mungkin dipengaruhi oleh pengaturan format tanggal regional):
Raih token pertama dalam jawabannya dan perluas itu:
sumber
Sebenarnya, ketika meletakkan sesuatu seperti di bawah ini dalam file .ps1 (katakanlah,
t.ps1
) dan memanggilnya dari sesi CMD dengan PowerShell-File t.ps1
... itu berfungsi dengan baik.Tapi tidak untuk sesi CMD tempat skrip t.ps1 dipanggil. Dalam sesi CMD baru kita dapatkan:
Saya kira kita harus mencari tahu bagaimana melakukan sesuatu seperti
export T=date
dalam sesi CMD.sumber
Jika Anda ingin file batch Anda mengakses variabel lingkungan yang ditetapkan oleh perintah PowerShell yang dijalankan dari file batch itu, Anda bisa menggunakan solusi berikut ini:
Buat skrip PowerShell Anda membuat file sub batch
mysub.bat
,, yang berisi baris "set variable = value", dan jalankan file batch mysub.bat dari file batch utama tepat setelah perintah PowerShell.Gunakan metode WriteAllLines daripada metode output PowerShell default sehingga file sub batch tidak dihasilkan dengan format pengkodean UTF-8.
Contoh
main.bat:
sumber