% টাইম% ভেরিয়েবল ব্যবহার করে ব্যাচ স্ক্রিপ্টের জন্য শীর্ষস্থানীয় শূন্যের প্রয়োজন


26

আমি আমার ডস স্ক্রিপ্টের একটি বাগ এসেছি যা ফাইল নামকরণের জন্য তারিখ এবং সময় ডেটা ব্যবহার করে। সমস্যাটি আমি একটি ফাঁক দিয়ে শেষ করেছিলাম কারণ সময় পরিবর্তনশীল স্বয়ংক্রিয়ভাবে ঘন্টাের জন্য শীর্ষস্থানীয় শূন্য সরবরাহ করে না <তাই চলমান> প্রতিধ্বনিত%%% ফিরে দেয়: '9: 29: 17.88'।

কেউ কি শর্তসাপেক্ষে এটিকে ঠিক করার জন্য শীর্ষস্থানীয় জিরোগুলিকে প্যাড করার কোনও উপায় জানেন?

আরও তথ্য: আমার ফাইল নাম সেট কমান্ডটি হ'ল:

set logfile=C:\Temp\robolog_%date:~-4%%date:~4,2%%date:~7,2%_%time:~0,2%%time:~3,2%%time:~6,2%.log

যা সত্তা শেষ হয়: সি: \ টেম্পি \ রোবলোজ_20100602_ 93208.log (সকাল 9:23 এর জন্য)।

এই প্রশ্নটি এই একটি সম্পর্কিত ।

ধন্যবাদ


প্যাডড আওয়ার মান পাওয়া সম্ভব ... ফর / এফ "টোকেনস = 1 টিলিমস =:" %% এ ইন ('সময় / টি') ডিও সেট করুন এইচএইচ = %% এ এরপরে% সময় প্রতিস্থাপন করুন: ~ 0,2% % এইচএইচ% এর সাথে আমি আরও কমপ্যাক্ট সমাধানের আশা করছিলাম তবে এটি কার্যকর হবে।
ইরা

একটি "আরও কমপ্যাক্ট" সমাধানটি অন্য ভাষায় (পাওয়ারশেল? পাইথন? পার্ল? ডাব্লুএসএইচ?) হতে পারে।
মাধ্যাকর্ষণ

আমি ব্যবহার করি এমন সমাধান হিসাবে জেসির উত্তর চিহ্নিত করতে স্যুইচ করা হয়েছে। এটি দুপুরের পূর্বের সময় প্যাড ডাব্লু / শীর্ষস্থানীয় 0 এবং দুপুর-পরবর্তী সামরিক সময় উভয়ের সাথে কাজ করে।
ইরা

উত্তর:


60

খুব সহজ উপায় হ'ল শূন্যের সাথে নেতৃস্থানীয় স্থানটি প্রতিস্থাপন করা:
echo %TIME: =0%
আউটপুটস:
09:18:53,45


1
এটি কাজ করে! এটি আমি মনে করি সবচেয়ে সহজ সমাধান ..
এ্যারোব্রেন

একাধিক চরিত্রের সাহায্যেও এটি করা যায়? আমি সব ',', '' এবং ':'। বর্তমানে আমি মধ্যবর্তী ভেরিয়েবলগুলি তৈরি করি তবে অবশ্যই এটি প্রতিস্থাপনের কয়েকটি সংখ্যার কারণে কাজ করে। আরও জন্য এটি জটিল হবে।
ডেভলাস

1
ঘন্টাকে সংশোধন করতে আমি এটি দ্বিতীয় "পদক্ষেপে" ব্যবহার করছি: set HH=%time:~-11,2% set MM=%time:~-8,2% set SS=%time:~-5,2% set ISOTIME=%HH: =0%-%MM%-%SS% echo %ISOTIME%এছাড়াও ss64.com/nt/syntax-replace.html দেখুন
হ্যান্ডেল করুন

+1 এটি সংক্ষিপ্ত / সেরা উত্তর। আমি কীভাবে ব্যবহার করেছি: set timestring=%TIME: =0%প্রথম কলের প্রথম দিকে - তারপরে কেবল timestring(বা আপনি যে পরিবর্তনশীল ব্যবহার করুন) এর সাথে কাজ করুন।
বিএসিয়া 13

14

আমার সমাধানটি নিম্নলিখিত ধারণাটি ব্যবহার করা ছিল:

SET HOUR=%TIME:~0,2%
IF "%HOUR:~0,1%" == " " SET HOUR=0%HOUR:~1,1%

আমি এটা পছন্দ করি. সহজ এবং স্বজ্ঞাত।
কেন

আধুনিক উইন্ডোতে কাজ করে, তবে সার্ভার 2003 এ সিনট্যাক্স ত্রুটি দেয়!
ডাঃ বিডিও অ্যাডামস

2008+, সবচেয়ে মার্জিত সমাধানে নির্দোষ কাজ করে। ধন্যবাদ.
bjoster

1
but gives syntax error on server 2003- কেন আপনি 2016 সালে এটি যত্ন?
মার্সিন ওরোলোস্কি

উইন্ডোজ 10 কমান্ড প্রম্পটে নিখুঁত
মাইক উপজহান

5

ডেনিসের উত্তরের অনুরূপ ধারণা । সমস্যাটি হ'ল প্রস্থটি %time%সর্বদা একই থাকে তাই এটি একটি সংক্ষিপ্ত স্ট্রিংয়ের পরিবর্তে শুরুর দিকে একটি স্থান সন্নিবেশ করে।

এর মাধ্যমে আপনি এ থেকে মুক্তি পেতে পারেন for:

for /f "delims= " %x in ("%time%") do set T=0%x

বাকিগুলি কমবেশি একই রকম, তবে।


2
এই সমাধানটি> 10 এর জন্য কাজ করে তবে এখন 10 এর জন্য '010' তৈরি করে: ...
ডিভলাস

3
জেসির উত্তরটি সঠিক ...
সাইমন সোবিশ

এটি খুব খারাপ উত্তর, এক ঘন্টা দু'টি অঙ্কের সাথে সাথেই এটি ভেঙে যায়। আমি ওপিকে এটি নির্বাচিত করতে পেরেছি le
thebunnyrules

3

জেসির কন্ট্রিবিউশন ব্যবহার করে, আমি কেবলমাত্র পরিবর্তিত আউটপুট সহ একটি পরিবর্তনশীল তৈরি করেছি created তারপরে আমি সেই পরিবর্তনশীলটিকে রেফার করি ঘন্টার অংশটি তৈরি করতে।

set NantTime=%time: =0%
nant\bin\nant.exe -nologo+ -debug+ -verbose+ -D:project.config=debug /f:build\default.build -l:logs\architect-build-%DATE:~10,4%-%DATE:~4,2%-%DATE:~7,2%-%NantTime:~0,2%-%time:~3,2%-%time:~6,2%.log 
pause

মূল উত্স সহ:

set hour=%time: =0%
set logfile=C:\Temp\robolog_%date:~-4%%date:~4,2%%date:~7,2%_%hour:~0,2%%time:~3,2%%time:~6,2%.log

ধন্যবাদ জেসি আমি খ্যাতি পয়েন্ট থাকলে ভোট দিতে হবে।


1

উপরের সব কিছু কার্যকর করার জন্য সর্বাধিক কমপ্যাক্ট সমাধানের জন্য, আমি মনে করি

ফর / এফ "টোকেনস = 1-4 ডিলিমস = /"%% এ ইন ("% তারিখ%") করুন / এফ করুন "টোকেনস = ১-৩ টি ডিলিম = :." %% E IN ("% TIME: = 0%") SET লগফিল = সি: \ টেম্পোর \ রোবোলজ _ %% ডি %% সি %% বি _ %% ই %% এফ %% জি.লগ

স্ক্রিপ্টে কোনও নতুন লাইন যুক্ত না করে এখানে কাজ করবে। এটি একাধিক কমান্ড সমাধানের চেয়ে কম মার্জিত হতে পারে, যদিও ..


1

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

:prepare time stamp 
set year=%date:~10,4%
set month=%date:~4,2%
set day=%date:~7,2%
set hour=%time:~0,2%
:replace leading space with 0 for hours < 10
if "%hour:~0,1%" == " "  set hour=0%hour:~1,1%
set minute=%time:~3,2%
set second=%time:~6,2%
set timeStamp=%year%.%month%.%day%_%hour%.%minute%.%second%

:run the program 
ProgramName.pl 1> RunLogs\out.%timeStamp% ^
               2> RunLogs\err.%timeStamp%

0

এটি সময়ের শুরুতে শূন্যকে দেখায় এবং ঘন্টাটির শেষ দুটি অঙ্ক নেয় (মিনিট এবং দ্বিতীয় শুরুর অবস্থানগুলি এক দ্বারা স্থানান্তরিত হয়)। সুতরাং 3 এএম "03" হয়ে যায় "03" এবং পরে ঘন্টা 15 "015" হয়ে "15" হয়ে যায়।

set T=0%time%
set T=%T:~1,2%%T:~4,2%%T:~7,2%
set D=%date:~-4%%date:~4,2%%date:~7,2%
set logfile=C:\Temp\robolog_%D%_%T%.log

কম পাঠযোগ্য:

set T=0%time%
set logfile=C:\Temp\robolog_%date:~-4%%date:~4,2%%date:~7,2%_%T:~1,2%%T:~4,2%%T:~7,2%.log

1
আমি নিশ্চিত না যে এটি কাজ করে। যদি আমি 'সেট টি = 0% সময়%' চালিত করি এবং এটি 9:38 এএম হয়, তবে প্রতিধ্বনি% T% ফিরে দেয়: '0 9: 38: 54.21', তারপরে% টি: ~ 1,2% স্থান পায়, কোনও অগ্রণী 0.
ইরা

0

কোডের একটি লাইন আপনার যা প্রয়োজন তা করবে:

    IF "%Time:~0,1%" == " " SET TimeStamp=0%Time:~1,7%

উদাহরণস্বরূপ, আমি% তারিখ% ব্যবহার করি এবং তারপরে আমি ভেরিয়েবলের সাথে একটি নেতৃস্থানীয় শূন্য যুক্ত করি যেটি নির্ধারণ করতে আমার প্রয়োজন হয়% সময়% এর জন্য শূন্যের সাথে নেতৃস্থানীয় স্থানটি প্রতিস্থাপন করতে হবে কিনা।

    ::Prepare TimeStamp variable by replacing leading space with 0 for Hours < 10
    SET TimeStamp=%Time:~0,8%
    IF "%Time:~0,1%" == " " SET TimeStamp=0%Time:~1,7%
    Echo Started on %Date$ at %TimeStamp%

    :: Insert what you are doing here...

    SET TimeStamp=%Time:~0,8%
    IF "%Time:~0,1%" == " " SET TimeStamp=0%Time:~1,7%
    ECHO Finished on %Date% at %TimeStamp%

0

এটি একটি বাছাইযোগ্য টাইমস্ট্যাম্প তৈরি করে এবং দ্বিতীয় লাইনটি স্ক্রিপ্টগুলির জন্য ব্যবহারযোগ্য করে তোলার জন্য একক অঙ্ক ইত্যাদি ইত্যাদির জন্য কোনও স্থান নেই তা নিশ্চিত করে:

set datestamp=%date:~-4%.%date:~-10,-8%.%date:~-7,-5%_%time:~0,2%.%time:~3,2%.%time:~6,2%
set datestamp=%datestamp: =_%

আউটপুট:

2018.02.26__9.47.34


0

উপর থেকে সাহায্য করার জন্য ধন্যবাদ ... আমি এটি ব্যবহার করছি:

C:\Windows\System32>SET short=%date:~10,4%-%date:~4,2%-%date:~7,2%
C:\Windows\System32>ECHO -- Short Date: %short%
-- Short Date: 2018-06-27
C:\Windows\System32>SET long=%date:~10,4%-%date:~4,2%-%date:~7,2%_%time:~0,2%_%time:~3,2%_%time:~6,2%
C:\Windows\System32>ECHO -- Long Date: %long%
-- Long Date: 2018-06-27_10_51_43

আমার তখন লগগুলি রয়েছে যা রবোকপি চাকরিতে এভাবে ডাকা হয়:

এরকম অনেকগুলি রয়েছে:

Robocopy C:\Users\ME\Favorites\ %usb%:\Local_PC\Favorites\ /MIR /TEE /FFT /DST /TIMFIX /W:5 /R:5 /NP /LOG+:%usb%:\Robocopy\LOG_%short%.txt

এটি দিয়ে কাজ শেষ:

REN %usb%:\Robocopy\LOG_%short%.txt COMPLETE_LOG_%long%.log

COMPLETE_LOG_2018-06-27_10_53_54.log ফাইলটি শেষ পর্যন্ত উত্পাদিত হয় এবং এটি ফাইলের নাম অনুসারে বাছাইযোগ্য।


0

জেসির উত্তরটি ঘন্টা ক্ষেত্রের স্থানটি সরিয়ে আমার ফাইলের পুনরায় নামকরণ সমস্যার সমাধান করেছে। এইভাবে আমি আমার ভেরিয়েবলগুলি সেট করি:

for /f "tokens=1,2,3,4 delims=/ " %%a in ("%date%") do set wday=%%a&set month=%%b&set day=%%c&set year=%%d
for /f "tokens=1,2 delims=:" %%a in ("%time: =0%") do set hour=%%a&set minute=%%b

এটি চ্যাম্পের মতো কাজ করে; কোনও কারণে তারিখের জন্য একই চিকিত্সার দরকার পড়েনি, তবে আমি ধারণা করি এটি আঞ্চলিক সেটিংসের চেয়ে কম।


0
    @echo off



    call :PAD aaa,2,0,grw
    echo [[aaa=%aaa%]]
    pause




rem #### Function PAD ####
    goto :PADEND
    :PAD <var>,<length>,<padchar>,<string>
        set padtot=%~2
        set padchar=%~3
        set padString=%~4
        :StartPADLOOP
            call :len lenpadString,%padString%
            if ["%lenpadString%"] GEQ ["%padtot%"] goto :EndPADLOOP
            set padString=%padchar%%padString%
            goto :StartPADLOOP
        :EndPADLOOP
        set %~1=%padString%
    GOTO :EOF
    :PADEND


rem #### Function LEN ####
    goto :LENEND
    :LEN <var>,<string>
        set LENtempvar=%~2
        rem echo {{S:%LENtempvar%}}
        set LENCOUNT=0    
        :startLENLOOP
            if ["%LENtempvar%"] EQU [""] goto :endLENLOOP
            rem echo {{A:%LENtempvar%}}
            set LENtempvar=%LENtempvar:~0,-1%
            rem echo {{B:%LENtempvar%}}
            set /a LENCOUNT=LENCOUNT+1
        goto :startLENLOOP
        :endLENLOOP
        set %~1=%LENCOUNT%
    GOTO :EOF
    :LENEND

-2
set sFolderName=%time: =0%
xcopy "%UserProfile%\Pictures\*.jpg" Y:\"%DATE%-%sFolderName:~0,2%h%time:~3,2%m%time:~6,2%s-%random%" /I /C /Y

15.06.2015-03h43m34s-5357

5357-%random%"

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