Saya perlu mengatur Tugas Terjadwal Windows. Ia menerima 1 parameter / argumen yang merupakan jalur dan dapat berisi spasi. Tugas saya yang Dijadwalkan tidak berfungsi - itu "memecah" parameter di ruang pertama.
Jika saya menjalankannya di Command Prompt, saya hanya bisa membungkus argumen di "" dan berfungsi dengan baik, namun, ini tidak berfungsi di UI Tugas Terjadwal.
misalnya C:\Program Files\xyz\FTP File Transfer\FTPFileTransferTask.exe "C:\Program Files\xyz\The Interface\Folder Path"
Saya telah mencoba membungkus argumen dengan "" '' [] () dan telah mencoba mengisi spasi dengan% 20, ~ 1 dll tanpa hasil.
Saya tahu satu solusi untuk membuat file kelelawar dan menggunakan "" argumen saya, tetapi saya tidak ingin menambah kerumitan.
Saya mencobanya pada Windows 7 dan Windows 2008 Server dan keduanya gagal. Sepertinya tidak ada diskusi tentang ini?
sumber
Jawaban:
Saya telah bekerja dengan tugas yang dijadwalkan dan Anda biasanya meletakkan argumen di kotak input teksnya sendiri. Ini berarti bahwa Anda mengarahkan tindakan ke bidang program / skrip menunjuk ke exe dan bidang "Tambahkan Argumen" harus memiliki semua parameter. ( sumber )
Saya percaya perilaku ini ditambahkan untuk mencegah spasi di jalur file ke exe yang menyebabkan masalah.
Saya melakukan ini sepanjang waktu dengan skrip PowerShell. Berikut ini sebuah contoh:
sumber
Perhatikan penggunaan
'
jalur file yang akan dijalankan.sumber
Dalam hal ini, Anda bisa mengatasi masalah dengan mengirimkan parameter path Anda dalam format 8.3.
Anda dapat menemukan format 8.3 untuk jalur Anda dengan membuka prompt perintah dan mengeluarkan perintah
dir /x
di root drive Anda.Anda akan melihat entri yang mirip dengan
untuk direktori Program Files Anda.
Kemudian ubah direktori ke Program Files dengan
cd "Program Files
"diikuti oleh cd xyz dan terbitkandir /x
lagi untuk menemukan nama format 8.3 untuk" The Interface ", dan seterusnya.Jalan terakhir Anda untuk contoh yang Anda berikan akan terlihat seperti:
sumber
Saya memiliki masalah yang sama dengan VLC, yang saya gunakan pada Windows XP. Caranya adalah dengan melampirkan argumen dari
cmd
perintah dalam tanda kutip ganda.Berikut adalah contoh dari apa yang saya gunakan (penjadwalan rekaman pukul 15:00):
Perhatikan penggunaan tanda kutip ganda tepat setelah
/c
dan di akhir perintah (setelah.mpg
). Argumen dengan spasi dalam hal ini adalah"C:\Documents and Settings\..."
sumber
Salah satu cara Anda dapat mencapai ini adalah menggunakan PowerShell dari baris perintah.
Tambahkan kode ini ke file bernama MyModule.psm1.
Kemudian dari baris perintah ATAU file ps1 Anda dapat menjalankan:
Setiap item dalam array taskparameters akan diteruskan sebagai $ (Arg0), $ (Arg1), dan $ (Arg2).
sumber
Tetapkan tugas terjadwal Anda sebagai berikut
cmd / c C: \ Program Files \ xyz \ Transfer File FTP \ FTPFileTransferTask.exe "C: \ Program Files \ xyz \ The Interface \ Folder Path"
sumber
Mungkin membantu untuk memahami masalah dari sudut pandang yang berbeda .. Katakanlah Anda adalah programmer yang ditugasi menambah penjadwal tugas ke Windows. Bagaimana Anda melakukannya? Anda memiliki beberapa masalah yang harus dihadapi: Jika tugas dijalankan sebagai orang lain selain pengguna yang masuk, haruskah Anda mengganggu pengguna yang masuk dengan sembulan kesalahan? Bagaimana jika tidak ada pengguna yang login pada saat tugas dijalankan? Bagaimana dengan perbedaan antara program GUI dan program konsol? GUI tidak memiliki stdin, stdout, dan stderr; konsep itu tidak ada artinya di dalamnya. Bagaimana dengan program internal atau eksternal ke COMMAND.COM/CMD.EXE? Atau mesin scripting lainnya? Bagaimana dengan path dengan spasi pada nama perintah? Atau dalam parameter (opsi / argumen)? (Saat Anda mencoba untuk berurusan dengan sekarang ..)
Meskipun saya tidak 100% yakin tentang internal atau detail teknis lengkap dalam kasus ini, jawabannya sepertinya .. Tugas dijalankan dalam sesi non-interaktif yang terisolasi, yang tidak dapat berinteraksi dengan pengguna yang saat ini masuk (jika ada ); Itu dijalankan mengharapkan tidak ada output konsol, karena ini non-interaktif, itu tidak bisa hanya mengganggu pengguna yang login untuk menunjukkan output, bagaimanapun (dan jika ada output, stdin adalah bitbucket / NULL, stdout dan stderr bisa masuk ke fasilitas logging sistem); Spasi ditangani dengan melewati masalah: nama perintah diambil PERSIS sebagaimana adanya, dan parameter diteruskan ke perintah ditentukan dalam kotak input lain di properti Tugas.
Apa artinya semua itu adalah bahwa tugas Anda harus dijalankan seolah-olah itu seperti daemon (di dunia Un * x). Semuanya statis dan presisi. Nama perintah adalah nama perintah yang sebenarnya, tanpa parameter apa pun. Ini sering termasuk menjalankan penerjemah perintah / skrip, seperti CMD.EXE! Parameter, jika ada, ditentukan di tempat lain, dan harus diketahui ketika Anda mengatur tugas (yaitu, Anda tidak dapat mengubah parameter "on-the-fly"). Dan seterusnya.
Jadi, jika Anda ingin memasukkan parameter, Anda harus menggunakan bagian parameter untuk menentukan parameter. Penjadwal Tugas tidakcoba parsing nama perintah untuk membaginya menjadi "perintah" dan "args" seperti program baris perintah lakukan. Itu hanya memperlakukannya sebagai satu, nama perintah penuh besar. Demikian juga, jika Anda menginginkan parameter variabel, seperti menggunakan% 1 ..% n dalam file BATCH, Anda tidak dapat melakukannya dari Penjadwal Tugas itu sendiri; Anda harus menemukan cara lain. (Perhatikan bahwa Anda tidak dapat menggunakan variabel lingkungan, karena lingkungan yang diteruskan ke program tergantung pada lingkungan tugas dimulai, BUKAN lingkungan "saat ini".) Anda bisa menggunakan file sementara untuk menyimpan parameter, tetapi karena Anda harus menentukan nama file statis di properti Tugas, apa yang terjadi ketika Anda berada di jaringan dengan 5.000 pengguna dan empat di antaranya mencoba menjalankan tugas yang sama pada waktu yang sama? Mereka semua akan saling menjatuhkan mencoba untuk menulis ke file temp yang sama pada saat yang sama, mungkin juga bukan yang Anda inginkan. (Ada solusi untuk masalah ini juga, tapi itu terlalu jauh di luar cakupan pertanyaan dan jawaban ini ..)
Jadi jawaban terakhir: Dalam kasus sederhana - jalur yang ingin Anda lewati sebagai parameter statis dan tidak berubah - Anda juga harus menentukan parameter di properti Tugas yang sesuai (Argumen) daripada di kotak Program / Script , atau gunakan file batch. Dalam kasus yang lebih kompleks - Anda harus mengajukan pertanyaan yang tepat atau meneliti bagaimana daemon bekerja dan bagaimana menggunakan penguncian / semafor dan semacamnya untuk komunikasi antar proses (IPC).
Semoga berhasil.
sumber
Microsoft memiliki buletin tentang ini: https://support.microsoft.com/en-us/help/823093/a-scheduled-task-does-not-run-when-you-use-schtasks-exe-to-create -aku ta
Pada dasarnya dikatakan menggunakan urutan "\" sebelum dan sesudah nama file batch.
sumber