ПРИКАСАТЬ батник от себя

389
Joel A

Я бы хотел, чтобы пакетный файл сам прикасался к произвольной дате / времени. Я пробовал...

touch.exe -xamq -t 201010201020 -- batch.cmd start /b "" cmd.exe /c "touch.exe -xamq -t 201010201020 -- batch.cmd" 

... и что самое забавное, при запуске в Windows (двойной щелчок) дата не меняется, и cmd.exe зависает около минуты. Когда я запускаю его в окне cmd, он работает просто отлично, без зависаний. Есть идеи, что происходит?

0
Является ли тот факт, что командный файл активно выполняет блокировку, предотвращая изменение его атрибутов? Если это так, вам нужен двухэтапный процесс, в котором пакетный файл A вызывает пакетный файл B, передавая имя A в качестве параметра и выходя из ** перед **, прежде чем коснется файл A. Может потребоваться задержка в B. DrMoishe Pippik 8 лет назад 0
Он заблокирован в моих примерах из Windows, но не из командной строки. Кроме того, вызов из A в B будет держать A открытым, потому что, когда B заканчивает работу, происходит «возврат» в A. Joel A 8 лет назад 0

1 ответ на вопрос

1
trigger

Quotes in wrong place. Plus needless indirection.

start /b "" cmd.exe /c "touch.exe -xamq -t 201010201020 -- batch.cmd" 

So you are asking CMD to ask Explorer (Start command) to start CMD to run a program.

start /b "" cmd.exe /c "touch.exe" -xamq -t 201010201020 -- batch.cmd 

Better

"touch.exe" -xamq -t 201010201020 -- batch.cmd 

To do it in Windows (copy without a destination updates the file date and %~0 is the name of the bat)

set olddate=%date% set oldtime=%time% date 1/1/2010 time 5:15 copy "%~0",, date %olddate% time %oldtime% 

Batchfiles are opened, the next line read, then closed for each line, and once to find out there are no more lines. Wierd stuff can happen if modifing a running bat.

& seperates commands on a line. && executes this command only if previous command's errorlevel is 0. || (not used above) executes this command only if previous command's errorlevel is NOT 0 > output to a file >> append output to a file < input from a file | output of one command into the input of another command ^ escapes any of the above, including itself, if needed to be passed to a program " parameters with spaces must be enclosed in quotes + used with copy to concatinate files. E.G. copy file1+file2 newfile, used with copy to indicate missing parameters. This updates the files modified date. E.G. copy /b file1,, %variablename% a inbuilt or user set environmental variable !variablename! a user set environmental variable expanded at execution time, turned with SelLocal EnableDelayedExpansion command %<number> (%1) the nth command line parameter passed to a batch file. %0 is the batchfile's name. %* (%*) the entire command line. %<a letter> or %%<a letter> (%A or %%A) the variable in a for loop. Single % sign at command prompt and double % sign in a batch file. \\ (\\servername\sharename\folder\file.ext) access files and folders via UNC naming. : (win.ini:streamname) accesses an alternative steam. Also separates drive from rest of path. . (win.ini) the LAST dot in a file path seperates the name from extension . (dir .\*.txt) the current directory .. (cd ..) the parent directory \\?\ (\\?\c:\windows\win.ini) When a file path is prefixed with \\?\ filename checks are turned off. < > : " / \ | Reserved characters. May not be used in filenames. Reserved names. These refer to devices eg, copy filename con which copies a file to the console window. CON, PRN, AUX, NUL, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8, and LPT9 Maximum path length 260 characters Maximum path length (\\?\) 32,767 characters (approx - some rare characters use 2 characters of storage) Maximum filename length 255 characters 
Спасибо Trigger за ваш вклад. Вы правы насчет странного поведения, ни один из ваших примеров не работает при двойном щелчке в проводнике, но оба прекрасно работают в окне cmd. Вздох, Windows! Joel A 8 лет назад 0
Вы должны отредактировать свой вопрос с большим количеством данных. Также включите ведение журнала в вашем пакетном эхо (echo% что-то% `) из предположений. Укажите точные вещи (код, переменные, структура папок). Я чихаю - надо идти. trigger 8 лет назад 0