উইন্ডোজ শিডিউড টাস্কে ফাঁকা ফাঁকে ফাঁকে যুক্তি কীভাবে পাস করতে হয়


15

আমার একটি উইন্ডোজ শিডিউল টাস্ক সেটআপ করা দরকার। এটি 1 টি প্যারামিটার / আর্গুমেন্ট গ্রহণ করে যা একটি পাথ এবং এতে স্পেস থাকতে পারে। আমার নির্ধারিত কাজটি কাজ করে না - এটি প্রথম স্থানে প্যারামিটারটি "ব্রেক" করে।

যদি আমি এটি কমান্ড প্রম্পটে চালিত করি তবে আমি যুক্তিটি কেবল "" এ গুটিয়ে রাখতে পারি এবং এটি ঠিক কাজ করে, তবে, এটি তফসিলযুক্ত টাস্ক UI তে কাজ করে না।

যেমন C:\Program Files\xyz\FTP File Transfer\FTPFileTransferTask.exe "C:\Program Files\xyz\The Interface\Folder Path"

আমি "" '[[] () দিয়ে যুক্তিটি মোড়ানোর চেষ্টা করেছি এবং ভাগ্য ছাড়াই% 20, ~ 1 ইত্যাদি দিয়ে ফাঁকা স্থান পূরণ করার চেষ্টা করেছি।

আমি ব্যাট ফাইল তৈরির একটি সমাধান জানি এবং আমার যুক্তিটি ঘিরে "" ব্যবহার করুন তবে আমি আরও জটিলতা যুক্ত করতে চাই না।

আমি এটি উইন্ডোজ 7 এবং উইন্ডোজ 2008 সার্ভারে চেষ্টা করেছিলাম এবং উভয়ই ব্যর্থ হয়েছিল। এ নিয়ে কোনও আলোচনা নেই বলে মনে হচ্ছে?


1
আপনি তফসিলযুক্ত কার্য সম্পাদনা করার সময় আপনি কি যুক্তিটি প্রোগ্রাম / স্ক্রিপ্ট বিভাগে বা যুক্তি যুক্ত করুন (optionচ্ছিক) বিভাগে রাখছেন?
উইলিয়াম জ্যাকসন

আপনি যদি কোন প্রোগ্রামটি হুবহু ব্যবহার করছেন তা নির্দিষ্ট করে দিলে এটি সহায়ক হবে কারণ আর্গুমেন্টগুলির সঠিক মোড়না প্রোগ্রামের বিবেচনার ভিত্তিতে এবং তফসিলযুক্ত টাকগুলি নয়। উইনসিসিপি, উদাহরণস্বরূপ, যখন আপনার নেট কোট করতে হবে ডাবল কোট ("" ... "") আশা করে।
টোবিয়াস প্লুটট

1) কী ব্যর্থ হচ্ছে, টাস্ক বা আপনার .exe এবং 2) আপনি ঠিক কী প্রবেশ করেছেন এবং কোথায় টাস্কশ্যাডে UI- তে এটি অস্পষ্ট। এটি কি সেখানেই থাকতে পারে যেখানে টাস্কশেড একটি কমান্ড চেয়েছিল (কার্যকর করার জন্য পুরো পথ), আপনি এটি কমান্ড-লাইন দেওয়ার চেষ্টা করছেন (খুব আলাদা জিনিস)?
Kreemoweet

ব্যাচের ফাইলের বিরুদ্ধে কেন? এটি জিনিস এত সহজ করে তোলে! অথবা আপনি যদি সাহসী বোধ করেন আপনি পাওয়ারশেল স্ক্রিপ্টের জন্য গুলি করতে পারেন ..
তুমচাদিত্য

উত্তর:


6

আমি নির্ধারিত কাজগুলির সাথে কাজ করেছি এবং আপনি সাধারণত যুক্তিগুলি তার নিজস্ব পাঠ্য ইনপুট বাক্সে রেখে দেন in এর অর্থ আপনি কর্মসূচিটি / স্ক্রিপ্টের ক্ষেত্রের দিকে নির্দেশনাটি প্রদর্শন করতে পারেন এবং "যুক্তি যুক্ত করুন" ক্ষেত্রের সমস্ত পরামিতি থাকা উচিত। ( উত্স )

ব্লগ ইমেজ

আমি বিশ্বাস করি যে এই সমস্যাটি ফাইলের পথে ফাঁকা স্থানটি প্রতিরোধের জন্য এক্সাই সমস্যা তৈরি করেছিল।

আমি পাওয়ারশেল স্ক্রিপ্টগুলির সাথে এই সমস্ত সময় করি। এখানে একটি উদাহরণ:

  • প্রোগ্রাম / স্ক্রিপ্ট: পাওয়ারশেল.এক্স
  • যুক্তি যুক্ত করুন : -কম্যান্ড "এবং 'সি: \ এইচএসডি - অনুলিপি করুন off logoffstudents.ps1'" -নন ইন্টারেক্টিভ
  • শুরু: খালি

ধন্যবাদ, তবে সমস্যাটি হচ্ছে আমার পরামিতিগুলির মধ্যে একটি ফাইল ফাইল (এবং এতে একটি স্থান রয়েছে)। সুতরাং আপনার উদাহরণে 100 কাজ করবে, তবে আপনি যদি "সি: \ ফোল্ডার শুরু করুন" পাস করতে চান?
রডনি

আমি আমার প্রোগ্রামগুলিতে কেবল উদ্ধৃতি ব্যবহার করি এবং এটি কার্যকর হয়। অ্যাম্পারস্যান্ড কেবল পাওয়ারশেলের সাথে প্রয়োজনীয়। এই প্রতীকটি CALL অপারেটর এবং আমাকে পাওয়ারশেল কমান্ড আনতে দেয়। বেশিরভাগ ক্ষেত্রে, উদ্ধৃতিগুলি আপনার প্রয়োজন। এই মুহুর্তে, আপনি নির্ধারিত কার্যগুলি সমর্থন করেন কিনা তা দেখতে আপনি এক্সের স্রষ্টার সাথে যোগাযোগ করতে চাইতে পারেন। আমি কয়েকটি বিরল প্রোগ্রাম চালিয়েছি যা কেবল নির্ধারিত টাস্ক হিসাবে চালানো অস্বীকার করে। আমি মনে করি যে কীভাবে প্যারামিটারগুলি পাস করা হয়েছে তাতে সূক্ষ্ম পার্থক্য রয়েছে যা সমস্যার সৃষ্টি করতে পারে। দুঃখিত আমি আরও সাহায্য করতে পারি না।
ডল্টকনাকল

সবচেয়ে খারাপ সময়ে, স্থানগুলি মুছে ফেলার জন্য আপনি ফোল্ডারটি পুনর্গঠন করতে পারেন। এটি আপনি যা চান তা নয়, তবে এটি কার্যকর করার একমাত্র উপায় হতে পারে।
ডল্টকনাকল

ধন্যবাদ ডল্টকনাকল - আমি জানি আমি এটি একটি .bat ফাইলের সাথেও করতে পেরেছি (এবং প্যারামের চারপাশে "" ব্যবহার করতে পারেন (যেমন আপনি পাওয়ারশেল স্ক্রিপ্টে করেন I আমি নিশ্চিত যে এটি উইন্ডোজ টাস্ক সম্পাদক ইউআই-তে একটি বাগ ... আমি .exe এর নির্মাতা -) - এটি একটি পরীক্ষার জোতা এবং কমান্ড প্রম্পট থেকে সূক্ষ্মভাবে কাজ করে তবে উইন্ডোজ ইউআইয়ের মাধ্যমে নয় ...
রডনি

1
আপনি যদি উদাহরণটি তৈরি করেন তবে এটি স্ট্যাকওভারফ্লোর জন্য একটি প্রশ্ন হতে পারে। আমার অনুভূতি আছে যে এই নির্ধারিত টাস্কটি সহ যখন এই এক্স ব্যবহার করা হয় তখন আপনার প্যারামিটার হ্যান্ডলিংটি পরিবর্তন করতে হবে। একটি পরামর্শ হ'ল কোনও ফাইলের জন্য পরামিতিগুলি পাওয়ার জন্য আপনার এক্সপি লগ করা উচিত যাতে আপনি দেখতে পাচ্ছেন কী পাস হচ্ছে। এটি নির্ধারিত টাস্ক প্যারামিটারগুলি কমান্ড লাইন প্যারামিটারগুলির মতো কিনা তা অন্তত আপনাকে দেখার অনুমতি দেয়।
ডল্টকনাকল

6
schtasks.exe /create /SC WEEKLY /D SUN /SD 11/12/2015 /ST 12:00:00 /TN "taskname" /TR "'c:\program files(x86)\task.exe' Arguments"

'চালানোর জন্য কোনও ফাইলের পথে নোট করুন ।


3

এই ক্ষেত্রে, আপনি আপনার পাথ প্যারামিটারটি 8.3 ফর্ম্যাটে পাস করে সমস্যাটি সমাধান করতে পারেন।

কমান্ড প্রম্পটটি খোলার মাধ্যমে এবং dir /xআপনার ড্রাইভের মূলটিতে কমান্ড জারি করে আপনি আপনার পাথের 8.3 ফর্ম্যাটটি আবিষ্কার করতে পারেন ।

আপনার অনুরূপ একটি এন্ট্রি দেখতে হবে

11/04/2011  12:10    <DIR>          PROGRA~1     Program Files

আপনার প্রোগ্রাম ফাইল ডিরেক্টরি জন্য।

তারপরে cd "Program Files"সিডি xyz এর পরে প্রোগ্রাম ফাইলগুলিতে ডিরেক্টরি পরিবর্তন করুন এবং dir /x" ইন্টারফেস "এর 8.3 ফর্ম্যাট নাম অনুসন্ধান করতে আবার ইস্যু করুন।

আপনি যে উদাহরণটি দিয়েছেন তার চূড়ান্ত পথটি দেখতে এরকম কিছু দেখাচ্ছে:

C:\PROGRA~1\XYZ\THEINT~1\FOLDER~1

ধন্যবাদ, আমি উত্তরটির প্রশংসা করি, তবে এটি আরও সমস্যার কারণ হয়। মূলত আমি একটি EXE .NET অ্যাপ্লিকেশন কল করছি যা আমি লিখেছিলাম যা এই প্যারাম ফোল্ডার পাথটি কোনও কিছুর জন্য ব্যবহার করে - এটি 8.3 ফর্ম্যাট পছন্দ করে না এবং পথটি খুঁজে পাচ্ছে না। সুতরাং, এটি করার অন্য কোনও উপায় আছে?
রডনি

PS - তাহলে এটি কি উইন্ডোজ শিড্যুলড টাস্ক অ্যাপে বাগ রয়েছে? স্পেস খুব সাধারণ!
রডনি

উইন্ডোজ 7 এ একটি দ্রুত পরীক্ষা আমার জন্য কাজ করে। টাস্কটি স্থাপনের জন্য আপনি যে পদক্ষেপগুলি নিয়েছিলেন সেখানে বিভিন্ন উপায় হিসাবে আপনি কি আমাদের চলতে পারেন? গ্যারেথ সম্পাদনা করার জন্য ধন্যবাদ, খুব সুন্দর দেখাচ্ছে।
কিথ

সুতরাং টাস্কটি এই ফর্ম্যাটিংয়ের সাথে ঠিক আছে, তবে তারপরে আমার। নেট প্রোগ্রাম (যা আর্গ স্ট্রিং হিসাবে পাথটিকে গ্রহণ করে) 8.3 ফর্ম্যাট থেকে পথটিকে সঙ্কুচিত করে না। সুতরাং সম্ভবত এটি একটি প্রোগ্রামিং প্রশ্ন - 8.3 টি পথ কীভাবে পরিচালনা করবেন?
রডনি

আমি এই আমাদের পুরানো জানি, কিন্তু আপনি কি হাইফেন চেষ্টা করেছেন (-)?
চিবুয়েজ ওপাটা

1

আমার ভিএলসি-তেও একই সমস্যা ছিল, যা আমি উইন্ডোজ এক্সপি-তে ব্যবহার করছিলাম। কৌশলটি হল যুক্তিটি বন্ধ করে দেওয়াcmd উদ্ধৃতি চিহ্ন মধ্যে কমান্ড।

এখানে আমি কী ব্যবহার করেছি তার উদাহরণ (15:00 এ একটি রেকর্ডিংয়ের সময় নির্ধারণ):

15:00 সেন্টিমিটার / সি "" সি: \ প্রোগ্রামমি \ ভিডিওলান \ ভিএলসি \ vlc.exe ডিভিবি-টি: // ফ্রিকোয়েন্সি = 698000000: প্রোগ্রাম = 4006: রান-টাইম = 5 --সআউট "সি: u নথি এবং সেটিংস \ USERNAME \ দস্তাবেজগুলি \ ভিডিও \ ভিএলসি \ test.mpg "" "

/cকমান্ডের ঠিক পরে এবং শেষে ডাবল কোটসের ব্যবহারটি নোট করুন (পরে .mpg)। এই ক্ষেত্রে স্পেসগুলির সাথে যুক্তিটি হ'ল"C:\Documents and Settings\..."


1

আপনি এটি সম্পাদন করতে পারেন এমন একটি উপায় হ'ল কমান্ড লাইন থেকে পাওয়ারশেল ব্যবহার করা।

এই কোডটি MyModule.psm1 নামে একটি ফাইলে যুক্ত করুন।

$TASK_STATE_UNKNOWN   = 0;
$TASK_STATE_DISABLED  = 1;
$TASK_STATE_QUEUED    = 2;
$TASK_STATE_READY     = 3;
$TASK_STATE_RUNNING   = 4;
Function Run-Task(
        [ValidateNotNullOrEmpty()][string]
        [Parameter(Mandatory=$true, ValueFromPipeline = $true, ValueFromPipelineByPropertyName = $true)]
        $ComputerName, 
        [ValidateNotNullOrEmpty()][string]
        [Parameter(Mandatory=$true, ValueFromPipeline = $true, ValueFromPipelineByPropertyName = $true)]
        $Foldername, 
        [ValidateNotNullOrEmpty()][string]
        [Parameter(Mandatory=$true, ValueFromPipeline = $true, ValueFromPipelineByPropertyName = $true)]
        $Taskname, 
        [int] $maxwait = 0, 
        [string[]]
        [Parameter(Mandatory=$false, ValueFromPipeline = $true, ValueFromPipelineByPropertyName = $true)]
        $TaskParameters = $null
    ){
    $TaskScheduler = New-Object -ComObject Schedule.Service
    $TaskScheduler.Connect($ComputerName)
    $ScheduledTaskFolder = $TaskScheduler.GetFolder($Foldername)
    $ScheduledTask = $ScheduledTaskFolder.GetTask($TaskName)

    if(-not $ScheduledTask) {
        return $Null
    }

    $ScheduledTask.Enabled = $True
    $ScheduledTask.Run($TaskParameters)

    if($maxwait -gt 0){
        $seconds = 5
        $i = 0;
        Start-Sleep -Seconds $seconds
        while ($ScheduledTask.State -eq $TASK_STATE_RUNNING)
        {
            if(($i * $seconds) -gt $maxwait) { 
                break; 
            } 
            Start-Sleep -Seconds $seconds        
            $i++;
        }
    }
    return $ScheduledTask
}

Export-ModuleMember -Variable "TASK_STATE*"
Export-ModuleMember -Function "Run-*"

তারপরে কমান্ড লাইন বা একটি পিএস 1 ফাইল থেকে আপনি চালাতে পারেন:

Import-Module $(Get-Item .\MyModule.psm1 | Resolve-Path -Relative) -DisableNameChecking -Force

$task = Run-Task -ComputerName "$env:COMPUTERNAME" -Taskname "Foo" -Foldername "\" -TaskParameters "test", "Tim C", $(Get-Date -format G)

টাস্কপ্যারামিটারে অ্যারে সম্পর্কিত প্রতিটি আইটেম $ (Arg0), $ (Arg1) এবং $ (Arg2) হিসাবে পাস হবে।


0

আপনার নির্ধারিত কাজটি নীচে সেট করুন

সেন্টিমিডি / সি সি: \ প্রোগ্রাম ফাইলগুলি y xyz \ এফটিপি ফাইল স্থানান্তর \ এফটিপিফাইলে ট্রান্সফারটাস্ক.এক্সই "সি: \ প্রোগ্রাম ফাইলগুলি \ xyz \ ইন্টারফেস \ ফোল্ডার পাথ"


0

এটি সমস্যাটিকে অন্য দৃষ্টিকোণ থেকে বুঝতে সহায়তা করতে পারে .. ধরা যাক আপনি সেই প্রোগ্রামার যাকে উইন্ডোজটিতে একটি টাস্ক শিডিয়ুলার যুক্ত করার জন্য অভিযুক্ত করা হয়েছিল। তুমি এটা কি ভাবে করবে? আপনার সাথে লড়াই করতে বেশ কয়েকটি সমস্যা রয়েছে: লগ-ইন করা ব্যবহারকারী ব্যতীত অন্য কারও মতো যদি টাস্কটি চালানো হয়, তবে কোনও ত্রুটি পপআপের সাহায্যে লগ-ইন করা ব্যবহারকারীকে বিরক্ত করা উচিত? টাস্কটি চালানোর সময় কোনও লগইন না থাকলে কী হবে? জিইউআই প্রোগ্রাম এবং কনসোল প্রোগ্রামের মধ্যে পার্থক্য সম্পর্কে কী? জিইউআইয়ের স্টিডিন, স্টাডআউট এবং স্টাডার নেই; ধারণা তাদের অর্থহীন। COMMAND.COM/CMD.EXE এর অভ্যন্তরীণ বা বহিরাগত প্রোগ্রামগুলি সম্পর্কে কী? বা অন্যান্য স্ক্রিপ্টিং ইঞ্জিনগুলি? কমান্ড নামের ফাঁকা স্থানগুলির সাথে কী হবে? বা পরামিতিগুলিতে (বিকল্প / যুক্তি)? (আপনি এখন যেমন মোকাবেলা করার চেষ্টা করছেন ..)

যদিও আমি এই ক্ষেত্রে ইন্টার্নাল বা সম্পূর্ণ প্রযুক্তিগত বিশদ সম্পর্কে 100% নিশ্চিত নই, উত্তরগুলি বলে মনে হচ্ছে .. কার্যগুলি একটি বিচ্ছিন্ন, অ-ইন্টারেক্টিভ সেশনে চালানো হয়, যা বর্তমানে লগ ইন করা ব্যবহারকারীর সাথে ইন্টারঅ্যাক্ট করতে পারে না (যদি থাকে তবে ); এটি কোনও কনসোল আউটপুট না হওয়ার প্রত্যাশা চালিয়ে যাচ্ছে, যেহেতু এটি অ-ইন্টারেক্টিভ, এটি আউটপুটটি দেখানোর জন্য কোনও লগইন হওয়া কোনও ব্যবহারকারীকে বাধা দিতে পারে না (এবং যদি আউটপুট থাকে তবে স্টিডিন বিটবাকেট / এনইউএল, স্টাডআউট এবং স্টার্ডার লগইন হয়) সিস্টেম লগিং সুবিধা); সমস্যাটি বাইপাস করে স্পেসগুলি পরিচালনা করা হয়: কমান্ডের নামটি হুবহু নেওয়া হয় হয়, এবং কমান্ডের সাথে পরামিতিগুলি পাস করার পরে টাস্ক বৈশিষ্ট্যের অন্য ইনপুট বাক্সে নির্দিষ্ট করা হয়।

সমস্ত উপায় হ'ল আপনার কাজটি এমনভাবে চালানো হবে যেন এটি ডেমনের মতো (আন * এক্স ওয়ার্ল্ডে)। সবকিছু স্থির এবং সুনির্দিষ্ট। কমান্ডের নামটি হ'ল আসল কমান্ডের নাম, কোনও পরামিতি ছাড়াই। এর মধ্যে প্রায়শই চলমান কমান্ড / স্ক্রিপ্ট ইন্টারপ্রেটারদের অন্তর্ভুক্ত থাকে যেমন সিএমডি.এক্সই! প্যারামিটারগুলি, যদি কোনও হয় তবে অন্য কোথাও নির্দিষ্ট করা থাকে এবং আপনি যখন টাস্কটি সেট আপ করবেন তখন অবশ্যই তা অবশ্যই জানতে হবে (অর্থাত্ "দ্য ফ্লাইটে" প্যারামিটারগুলি পরিবর্তন করতে পারবেন না)। ইত্যাদি।

সুতরাং, আপনি যদি প্যারামিটারগুলি অন্তর্ভুক্ত করতে চান তবে আপনাকে পরামিতিগুলি নির্দিষ্ট করতে পরামিতি বিভাগটি ব্যবহার করতে হবে। টাস্ক শিডিয়ুলার করে নাকমান্ডের নামটিকে "কমান্ড" এবং "আরগস" - এ ভাগ করতে যেমন কমান্ড লাইন প্রোগ্রামগুলি ভাগ করে দেখুন। এটি এটিকে একটি বড়, পুরো কমান্ডের নাম হিসাবে বিবেচনা করে। তেমনিভাবে, আপনি যদি ব্যাচ ফাইলগুলিতে% 1 ..% n ব্যবহার করার মতো চলক পরামিতিগুলি চান তবে আপনি নিজেই টাস্ক শিডিয়ুলার থেকে এটি করতে পারবেন না; আপনাকে অন্য কোনও উপায় খুঁজে বের করতে হবে। (মনে রাখবেন যে আপনি পরিবেশের ভেরিয়েবলগুলি ব্যবহার করতে পারবেন না, যেহেতু প্রোগ্রামটিতে পরিবেশ পরিবেশটি পরিবেশের উপর নির্ভর করে টাস্কটি "বর্তমান" পরিবেশের সাথে শুরু করা হয়নি তার উপর নির্ভর করে।) পরামিতিগুলি সংরক্ষণ করার জন্য আপনি একটি অস্থায়ী ফাইল ব্যবহার করতে পারেন তবে আপনি যেহেতু টাস্ক বৈশিষ্ট্যগুলিতে অবশ্যই একটি স্থিতিশীল ফাইলের নাম নির্দিষ্ট করতে হবে, আপনি যখন 5000 ব্যবহারকারী এবং তাদের মধ্যে চারজন একই সাথে একই টাস্কটি চালানোর চেষ্টা করেন তখন আপনি কী হন? তারা সবাই একে অপরকে একই সময়ে একই টেম্প ফাইলটিতে লেখার চেষ্টা করবে, সম্ভবত আপনি যা চেয়েছিলেন তা নয়। (এই সমস্যার সমাধানগুলিও রয়েছে, তবে এটি এই প্রশ্ন ও উত্তরের ক্ষেত্রের বাইরে চলে গেছে ..)

সুতরাং চূড়ান্ত উত্তর: সহজ ক্ষেত্রে - আপনি প্যারামিটার হিসাবে যে পথটি পাস করতে চান তা স্থির এবং পরিবর্তিত হয় না - আপনাকে প্রোগ্রাম / স্ক্রিপ্ট বাক্সের পরিবর্তে উপযুক্ত টাস্ক সম্পত্তি (যুক্তি )গুলিতে প্যারামিটারগুলি নির্দিষ্ট করতে হবে have , বা ব্যাচ ফাইল ব্যবহার করুন। আরও জটিল ক্ষেত্রে - আপনাকে সঠিক প্রশ্ন জিজ্ঞাসা করতে হবে বা ডেমোনগুলি কীভাবে কাজ করবে এবং কীভাবে লকিং / সেমোফোরস ব্যবহার করতে হবে এবং আন্তঃ প্রক্রিয়া যোগাযোগের জন্য আইপিসি প্রয়োজন তা গবেষণা করতে হবে।

শুভকামনা।


আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.