как вы видите, он заблокирован в каком-то месте %SYSTEMDRIVE%\Temp\, чтобы сделать мой сценарий «переносимым», могу ли я что-то заменить %SYSTEMDRIVE%\Temp\?
или, говоря другими словами: я хотел бы удалить все экземпляры %SYSTEMDRIVE%\Temp\из моей партии и заменить его чем-то таким образом, чтобы, если я перенесу свою FOLDER 1 куда- нибудь на моем ПК, он запустился
`.. \ ПАРТИЙ \ batch1.bat`
Joel Coehoorn 5 лет назад
0
2 ответа на вопрос
0
LotPings
Папка, в которой находится партия, может быть получена %~dp0(с обратной косой чертой)
Файловая система заботится об относительных папках, адресуемых на ..один уровень выше.
:: A:\FOLDER 1\BATCHES\batch1.bat @Echo off Echo batch1 folder is: %~dp0 Echo ====================== for %%A in ("%~dp0..\PROGRAMS\pro.exe") Do set "_Prg=%%~fA" for %%A in ("%~dp0..\SCRIPT\script.srpt") Do set "_Inp=%%~fA" for %%A in ("%~dp0..\FILES\myfile.x") Do set "_Out=%%~fA" Set _ Echo "%_Prg%" --input "%_Inp%" --output "%_Out%"
если я могу спросить, нужна ли часть `% ~ dp0` с целым` для %% A в (".... ... Set_` часть и зачем? Я пробовал только с этим:` ".. \\ PROGRAMS \ pro.exe "--input" .. \\ SCRIPT \ script.srpt "--output" .. \\ FILES \ myfile.x "`, и пакетный процесс выполняет все как следует
user902300 5 лет назад
0
`For` просто используется для разрешения выражения внутри двойных кавычек, оно также будет работать напрямую, но менее понятно:` A: \ FOLDER 1 \ BATCHES \ .. \ PROGRAMS \ pro.exe` в моем примере.
LotPings 5 лет назад
0
я имел в виду следующее: да, я понимаю весь ваш ответ / код ... просто в обоих ответах так или иначе упоминается использование `% ~ dp0`, так что мой вопрос был более о: это выбор способа использования `% ~ dp0` или я теряю какое-либо преимущество, если я иду без него, просто и только с помощью` ".. \\ PROGRAMS \ pro.exe" --input ".. \\ SCRIPT \ script.srpt" --output ".. \\ FILES \ myfile.x" `и ничего больше
user902300 5 лет назад
0
В зависимости от контекста `" .. \ PROGRAMS \ pro.exe "--input" .. \ SCRIPT \ script.srpt "--output" .. \ FILES \ myfile.x "` может ссылаться на текущий каталог `% CD % `, который не обязательно совпадает с путём пакета.
LotPings 5 лет назад
0
Я прошу прощения, если я раздражаюсь, но не могли бы вы объяснить: «** ... может относиться к текущему каталогу% CD%, который не обязательно совпадает с путем к пакету. **« Я читаю его все и не могу понять точка
user902300 5 лет назад
0
Когда вы открываете окно cmd, вы видите приглашение типа `C: \ Users \ UserName>`, в этой папке выполняются все действия без указания другого пути. Если вы вызываете пакет с путем, подобным `C: \ Temp \ FOLDER 1 \ BATCHES \ batch1.bat`, текущий каталог остается тем же` C: \ Users \ UserName`, поэтому относительный путь будет относительно текущей папки, а не в папку, в которой находится пакет.
LotPings 5 лет назад
1
0
JosefZ
Давайте рассмотрим следующий сценарий:
d:\bat> tree /F "d:\temp\FOLDER 1" Folder PATH listing for volume VolName Volume serial number is ABCD-EFGH D:\TEMP\FOLDER 1 ├───BATCHES │ batch1.bat │ └───PROGRAMS pro.exe
Обратите внимание, что%~dp0..\PROGRAMS отличается от ..\PROGRAMSобщего:
%~dp0..\PROGRAMS путь относительно каталога, в котором находится пакет
(d:\temp\FOLDER 1\BATCHES\в приведенном выше примере)
..\PROGRAMS путь относительно текущего каталога, из которого был запущен пакет
( d:\bat\в приведенном выше примере)
если можно спросить, это часть `% ~ dp0` со всей частью` SETLOCAL EnableExtensions ... dir / B / S "% PathToBatch%" ... dir / B / S "% PathToBatch% .. \ Programs" ` нужен и зачем? Я попробовал только с этим: `" .. \\ PROGRAMS \ pro.exe "--input" .. \\ SCRIPT \ script.srpt "--output" .. \\ FILES \ myfile.x "` и пакетное выполнение все как должно
user902300 5 лет назад
0
Моя вина, прости. Представьте себе `set" PathToBatch =% ~ dp0 "` (который был в сценарии во время отладки). Ответ обновлен.
JosefZ 5 лет назад
0
Я имел в виду: в чем разница между `"% ~ dp0 .. \\ FILES \ myfile.x "` и `" .. \\ FILES \ myfile.x "`? И зачем мне нужен `dir / B / S`?
user902300 5 лет назад
0
Разница теперь объясняется в обновленном ответе. Я использовал `dir / B / S"% ~ dp0 .. \ Programs "` просто чтобы показать результат использования `..` в спецификации пути. SuperUser не является бесплатной службой сценариев, поэтому вы не можете ожидать надежного решения в любое время.
JosefZ 5 лет назад
0