ўстаноўка зменнай у пакетны файл, калі/іншае заяву ў For Loop

Я спрабую стварыць пакетны файл, які генеруе карыстацкі AviSynth скрыпт на кожны файл. Зараз пакетны файл усталёўваецца для выканання з папкі, дзе існуюць відэа файлы. Што мне трэба зрабіць, гэта атрымаць час стварэння файла, каб згенераваць таймкод гарэць ст. У мяне няма праблем з атрыманнем інфармацыі мне трэба. Аднак, калі файл быў створаны ў другой палове дня мне гэта трэба паспець 24hr. Напрыклад, 2 вечара павінна адлюстроўвацца як 14.

У мяне ёсць праца, калі зацвярджэнне, што стварае Ніт зменныя, якая дадае 12, калі гэта будзе неабходна. Аднак, калі яна не патрэбна пераменная захоўваецца. На кожнай наступнай ітэрацыі цыклу зменная не змяняецца.

Мой прыклад. У мяне ёсць два файла, першы быў створаны ў 2pm іншы ў 12 вечара. Файл 2 вечара счытваецца першым і Ньют пераменная становіцца 14. Да гэтага часу так добра. На наступным файле Ньют пераменная павінна стаць 12, але замест гэтага застаецца 14. Як гэта выправіць?

@Echo Off & CLS
SetLocal EnableDelayedExpansion
For /F %%a In ('dir *.mpg /b') Do (
    ECHO Processing "%%a"
    echo %%~ta
    set time=%%~ta
    set th=!time:~11,2!
    set tm=!time:~14,2!
    set era=!time:~17,2!
    echo !era!
    if "!era!"=="PM" (
        if !th! LSS 12 ( set /a newth=!th!+12 )
    ) else ( set /a newth=!th!)

    echo !newth!
    echo //AviSynth Test Script >scripts/%%a.avs
    echo DirectshowSource^("%%~fa"^)>>scripts/%%a.avs
    echo LanczosResize^(720,400^) >>scripts/%%a.avs
    echo ShowSMPTE^(^) >>scripts/%%a.avs

    ECHO Back to Console
    Pause
)

Гэта трохі брудны, таму што я выкарыстоўваю рэха для адладкі. Але, спадзяюся, праблема ясная.

2
што ваша аперацыйная сістэма? Ёсць некалькі спосабаў, каб атрымаць час ...
дададзена аўтар npocmaka, крыніца
што ваша аперацыйная сістэма? Ёсць некалькі спосабаў, каб атрымаць час ...
дададзена аўтар npocmaka, крыніца
ааа ... набор ўсталяваць «й =» ў пачатку цыклу, каб ачысціць яго значэнне
дададзена аўтар npocmaka, крыніца
Вы спрабавалі з , калі/я «! Эры!» == "PM"
дададзена аўтар npocmaka, крыніца
Вы хочаце мадыфікаваць час або час стварэння? Вы згадвалі як.
дададзена аўтар foxidrive, крыніца
Вы хочаце мадыфікаваць час або час стварэння? Вы згадвалі як.
дададзена аўтар foxidrive, крыніца
Вы хочаце мадыфікаваць час або час стварэння? Вы згадвалі як.
дададзена аўтар foxidrive, крыніца
<�Код> %% ~ тая не адлюстроўваецца секунд. <�Код> тэчка таксама ня робіць. Вы можаце ўсталяваць фармат часу сістэмы на любы іншы.
дададзена аўтар Endoro, крыніца
<�Код> %% ~ тая не адлюстроўваецца секунд. <�Код> тэчка таксама ня робіць. Вы можаце ўсталяваць фармат часу сістэмы на любы іншы.
дададзена аўтар Endoro, крыніца
Я на Windows 7. Я проста зразумеў, што ўстаноўка часу АС для 24ч вырашае гэтую праблему. Я б, аднак, хацеў бы атрымаць час змянення файла аж да другой, але можа атрымаць толькі CMD для адлюстравання гадзін і хвілін.
дададзена аўтар user2433986, крыніца
Я на Windows 7. Я проста зразумеў, што ўстаноўка часу АС для 24ч вырашае гэтую праблему. Я б, аднак, хацеў бы атрымаць час змянення файла аж да другой, але можа атрымаць толькі CMD для адлюстравання гадзін і хвілін.
дададзена аўтар user2433986, крыніца
дзякуй, але гэта не вырашае праблему, я мае. Праблема ў тым, што калі Ньют існуе з папярэдняга цыклу гэта звычай вярнуцца да ! Й! у раздзеле іншае. Такім чынам, захоўваючы сваё значэнне ад папярэдняй ітэрацыі.
дададзена аўтар user2433986, крыніца
дзякуй, але гэта не вырашае праблему, я мае. Праблема ў тым, што калі Ньют існуе з папярэдняга цыклу гэта звычай вярнуцца да ! Й! у раздзеле іншае. Такім чынам, захоўваючы сваё значэнне ад папярэдняй ітэрацыі.
дададзена аўтар user2433986, крыніца

11 адказы

Вось метад з Wmic - Wmic ў XP Pro і вышэй.

@Echo Off & CLS
SetLocal EnableDelayedExpansion
For /F "delims=" %%a In ('dir *.mpg /b') Do (
    ECHO Processing "%%a"

    set "file=%cd%\%%a"
    set "file=!file:\=\\!"
    WMIC DATAFILE WHERE name="!file!" get creationdate|find ".">file.tmp
    for /f %%a in (file.tmp) do set dt=%%a
    set tm=!dt:~8,2!:!dt:~10,2!:!dt:~12,2!
    del file.tmp
    echo !tm!
    echo //AviSynth Test Script >scripts/%%a.avs
    echo DirectshowSource^("%%~fa"^)>>scripts/%%a.avs
    echo LanczosResize^(720,400^) >>scripts/%%a.avs
    echo ShowSMPTE^(^) >>scripts/%%a.avs

    ECHO Back to Console
    Pause
)
1
дададзена
Ааа. Тое, што я спрабаваў зрабіць. + 1
дададзена аўтар npocmaka, крыніца

Вось метад з Wmic - Wmic ў XP Pro і вышэй.

@Echo Off & CLS
SetLocal EnableDelayedExpansion
For /F "delims=" %%a In ('dir *.mpg /b') Do (
    ECHO Processing "%%a"

    set "file=%cd%\%%a"
    set "file=!file:\=\\!"
    WMIC DATAFILE WHERE name="!file!" get creationdate|find ".">file.tmp
    for /f %%a in (file.tmp) do set dt=%%a
    set tm=!dt:~8,2!:!dt:~10,2!:!dt:~12,2!
    del file.tmp
    echo !tm!
    echo //AviSynth Test Script >scripts/%%a.avs
    echo DirectshowSource^("%%~fa"^)>>scripts/%%a.avs
    echo LanczosResize^(720,400^) >>scripts/%%a.avs
    echo ShowSMPTE^(^) >>scripts/%%a.avs

    ECHO Back to Console
    Pause
)
1
дададзена
Ааа. Тое, што я спрабаваў зрабіць. + 1
дададзена аўтар npocmaka, крыніца

Вось метад з Wmic - Wmic ў XP Pro і вышэй.

@Echo Off & CLS
SetLocal EnableDelayedExpansion
For /F "delims=" %%a In ('dir *.mpg /b') Do (
    ECHO Processing "%%a"

    set "file=%cd%\%%a"
    set "file=!file:\=\\!"
    WMIC DATAFILE WHERE name="!file!" get creationdate|find ".">file.tmp
    for /f %%a in (file.tmp) do set dt=%%a
    set tm=!dt:~8,2!:!dt:~10,2!:!dt:~12,2!
    del file.tmp
    echo !tm!
    echo //AviSynth Test Script >scripts/%%a.avs
    echo DirectshowSource^("%%~fa"^)>>scripts/%%a.avs
    echo LanczosResize^(720,400^) >>scripts/%%a.avs
    echo ShowSMPTE^(^) >>scripts/%%a.avs

    ECHO Back to Console
    Pause
)
1
дададзена
Ааа. Тое, што я спрабаваў зрабіць. + 1
дададзена аўтар npocmaka, крыніца

Вось метад з Wmic - Wmic ў XP Pro і вышэй.

@Echo Off & CLS
SetLocal EnableDelayedExpansion
For /F "delims=" %%a In ('dir *.mpg /b') Do (
    ECHO Processing "%%a"

    set "file=%cd%\%%a"
    set "file=!file:\=\\!"
    WMIC DATAFILE WHERE name="!file!" get creationdate|find ".">file.tmp
    for /f %%a in (file.tmp) do set dt=%%a
    set tm=!dt:~8,2!:!dt:~10,2!:!dt:~12,2!
    del file.tmp
    echo !tm!
    echo //AviSynth Test Script >scripts/%%a.avs
    echo DirectshowSource^("%%~fa"^)>>scripts/%%a.avs
    echo LanczosResize^(720,400^) >>scripts/%%a.avs
    echo ShowSMPTE^(^) >>scripts/%%a.avs

    ECHO Back to Console
    Pause
)
1
дададзена
Ааа. Тое, што я спрабаваў зрабіць. + 1
дададзена аўтар npocmaka, крыніца

Ёсць некалькі праблем з вашым кодам. Галоўным з іх з'яўляецца гэтая паслядоўнасць

if "!era!"=="PM" (
    if !th! LSS 12 ( set /a newth=!th!+12 )
) else ( set /a newth=!th!)

З першым FILETIME "02: хх PM"
<�Код> й = 02, эры = PM, так набор/а Ньют = 02 + 12 наборы Ньют = 14

With your second filetime "12:xx PM"
th=12, era=PM, so - do nothing, since there's no else action for !th! LSS 12

Такім чынам, Ньют застаецца на ўзроўні 14.

Такім чынам - што такое выпраўленне? Паколькі вы не карыстаецеся Ньют далей, мы не можам сказаць напэўна, але, падобна, вы хочаце 24-гадзінны фармат - 4 лічбы HHMM .

DANGER, Will Robinson moment number 1:
You are dealing with numbers starring LEADING ZEROES. All well and good except where the value is 08 or 09, which batch bizarrely interprets as OCTAL since it begins 0.

DANGER, Will Robinson moment number 2:
set /a will suppress leading zeroes, so set /a newth=!th! will set newth to 7 for time 07:36 AM - not 07...

Такім чынам - як усё гэта пераадолець?

IF !th!==12 SET th=00
SET th=!th: =0!
if "!era!"=="PM" (set /a newth=1!th!+12
 SET newth=!newth:~-2!
) else ( set newth=!th!)

This forces 12 AM to 00 AM and 12 PM to 00 PM
Then replace any spaces with 0 (in case you have leading spaces, not zeroes)
Then, if era is PM, add 100 by stringing 1 before the 2-digit hour number, add 12 and grab the last 2 characters
Otherwise, just use the number in th

На жаль, зрабіў крыху больш складаным, так як вы не сказалі нам, карыстаецеся Ці вы ці не выкарыстоўваць вядучыя нулі на вашым фармаце часу. Тым не менш, няпоўны арыгінальны метад разліку вінаваты.

DANGER, Will Robinson moment number 3:
time is a MAGIC VARIABLE - and you know what happened to Mickey when he got involved in things better left alone.

Калі вы ўсталюеце час у партыі, а затым % часу% або ! Раз! вяртае значэнне, якое вы ўсталюеце. Калі вы не ўсталюеце яго, то вяртаецца значэнне будзе сістэмны час. Тое ж самае ставіцца і да DATE і шэраг аналагічных значэнняў (гл набор/ з каманднага радка - ёсць спіс у канцы)

1
дададзена

Ёсць некалькі праблем з вашым кодам. Галоўным з іх з'яўляецца гэтая паслядоўнасць

if "!era!"=="PM" (
    if !th! LSS 12 ( set /a newth=!th!+12 )
) else ( set /a newth=!th!)

З першым FILETIME "02: хх PM"
<�Код> й = 02, эры = PM, так набор/а Ньют = 02 + 12 наборы Ньют = 14

With your second filetime "12:xx PM"
th=12, era=PM, so - do nothing, since there's no else action for !th! LSS 12

Такім чынам, Ньют застаецца на ўзроўні 14.

Такім чынам - што такое выпраўленне? Паколькі вы не карыстаецеся Ньют далей, мы не можам сказаць напэўна, але, падобна, вы хочаце 24-гадзінны фармат - 4 лічбы HHMM .

DANGER, Will Robinson moment number 1:
You are dealing with numbers starring LEADING ZEROES. All well and good except where the value is 08 or 09, which batch bizarrely interprets as OCTAL since it begins 0.

DANGER, Will Robinson moment number 2:
set /a will suppress leading zeroes, so set /a newth=!th! will set newth to 7 for time 07:36 AM - not 07...

Такім чынам - як усё гэта пераадолець?

IF !th!==12 SET th=00
SET th=!th: =0!
if "!era!"=="PM" (set /a newth=1!th!+12
 SET newth=!newth:~-2!
) else ( set newth=!th!)

This forces 12 AM to 00 AM and 12 PM to 00 PM
Then replace any spaces with 0 (in case you have leading spaces, not zeroes)
Then, if era is PM, add 100 by stringing 1 before the 2-digit hour number, add 12 and grab the last 2 characters
Otherwise, just use the number in th

На жаль, зрабіў крыху больш складаным, так як вы не сказалі нам, карыстаецеся Ці вы ці не выкарыстоўваць вядучыя нулі на вашым фармаце часу. Тым не менш, няпоўны арыгінальны метад разліку вінаваты.

DANGER, Will Robinson moment number 3:
time is a MAGIC VARIABLE - and you know what happened to Mickey when he got involved in things better left alone.

Калі вы ўсталюеце час у партыі, а затым % часу% або ! Раз! вяртае значэнне, якое вы ўсталюеце. Калі вы не ўсталюеце яго, то вяртаецца значэнне будзе сістэмны час. Тое ж самае ставіцца і да DATE і шэраг аналагічных значэнняў (гл набор/ з каманднага радка - ёсць спіс у канцы)

1
дададзена

Ёсць некалькі праблем з вашым кодам. Галоўным з іх з'яўляецца гэтая паслядоўнасць

if "!era!"=="PM" (
    if !th! LSS 12 ( set /a newth=!th!+12 )
) else ( set /a newth=!th!)

З першым FILETIME "02: хх PM"
<�Код> й = 02, эры = PM, так набор/а Ньют = 02 + 12 наборы Ньют = 14

With your second filetime "12:xx PM"
th=12, era=PM, so - do nothing, since there's no else action for !th! LSS 12

Такім чынам, Ньют застаецца на ўзроўні 14.

Такім чынам - што такое выпраўленне? Паколькі вы не карыстаецеся Ньют далей, мы не можам сказаць напэўна, але, падобна, вы хочаце 24-гадзінны фармат - 4 лічбы HHMM .

DANGER, Will Robinson moment number 1:
You are dealing with numbers starring LEADING ZEROES. All well and good except where the value is 08 or 09, which batch bizarrely interprets as OCTAL since it begins 0.

DANGER, Will Robinson moment number 2:
set /a will suppress leading zeroes, so set /a newth=!th! will set newth to 7 for time 07:36 AM - not 07...

Такім чынам - як усё гэта пераадолець?

IF !th!==12 SET th=00
SET th=!th: =0!
if "!era!"=="PM" (set /a newth=1!th!+12
 SET newth=!newth:~-2!
) else ( set newth=!th!)

This forces 12 AM to 00 AM and 12 PM to 00 PM
Then replace any spaces with 0 (in case you have leading spaces, not zeroes)
Then, if era is PM, add 100 by stringing 1 before the 2-digit hour number, add 12 and grab the last 2 characters
Otherwise, just use the number in th

На жаль, зрабіў крыху больш складаным, так як вы не сказалі нам, карыстаецеся Ці вы ці не выкарыстоўваць вядучыя нулі на вашым фармаце часу. Тым не менш, няпоўны арыгінальны метад разліку вінаваты.

DANGER, Will Robinson moment number 3:
time is a MAGIC VARIABLE - and you know what happened to Mickey when he got involved in things better left alone.

Калі вы ўсталюеце час у партыі, а затым % часу% або ! Раз! вяртае значэнне, якое вы ўсталюеце. Калі вы не ўсталюеце яго, то вяртаецца значэнне будзе сістэмны час. Тое ж самае ставіцца і да DATE і шэраг аналагічных значэнняў (гл набор/ з каманднага радка - ёсць спіс у канцы)

1
дададзена

Вось як вы можаце атрымаць штамп часу з секундамі:

C:\>powershell -command "& {(gwmi -query """select * from cim_datafile where name = 'C:\\file.txt' """).lastModified;}"

C:\>powershell -command "& {(gwmi -query """select * from cim_datafile where name = 'D:\\other.txt' """).creationdate;}"

Я паспрабаваў з дапамогай WMIC , але да гэтага часу не можа атрымаць час stamp.As вы карыстаецеся Win7 вы павінны мець усталяваны PowerShell па змаўчанні.

0
дададзена

Вось як вы можаце атрымаць штамп часу з секундамі:

C:\>powershell -command "& {(gwmi -query """select * from cim_datafile where name = 'C:\\file.txt' """).lastModified;}"

C:\>powershell -command "& {(gwmi -query """select * from cim_datafile where name = 'D:\\other.txt' """).creationdate;}"

Я паспрабаваў з дапамогай WMIC , але да гэтага часу не можа атрымаць час stamp.As вы карыстаецеся Win7 вы павінны мець усталяваны PowerShell па змаўчанні.

0
дададзена

Вось як вы можаце атрымаць штамп часу з секундамі:

C:\>powershell -command "& {(gwmi -query """select * from cim_datafile where name = 'C:\\file.txt' """).lastModified;}"

C:\>powershell -command "& {(gwmi -query """select * from cim_datafile where name = 'D:\\other.txt' """).creationdate;}"

Я паспрабаваў з дапамогай WMIC , але да гэтага часу не можа атрымаць час stamp.As вы карыстаецеся Win7 вы павінны мець усталяваны PowerShell па змаўчанні.

0
дададзена

Вось як вы можаце атрымаць штамп часу з секундамі:

C:\>powershell -command "& {(gwmi -query """select * from cim_datafile where name = 'C:\\file.txt' """).lastModified;}"

C:\>powershell -command "& {(gwmi -query """select * from cim_datafile where name = 'D:\\other.txt' """).creationdate;}"

Я паспрабаваў з дапамогай WMIC , але да гэтага часу не можа атрымаць час stamp.As вы карыстаецеся Win7 вы павінны мець усталяваны PowerShell па змаўчанні.

0
дададзена