[英]Batch file equivalent of Unix parameter expansion with quotes
關於%*
,有關批處理文件參數有很多問題要問和回答,但是我還沒有找到答案。
批處理文件中是否存在等效的語法,可以執行與Unix中的“ $ @”相同的行為?
一些背景:
@echo off
set MYPATH=%~dp0
set PYTHON=%MYPATH%..\python\python
set BASENAME=%~n0
set XTPY=%MYPATH%..\SGTools\bin\%BASENAME%.py
"%PYTHON%" "%XTPY%" %*
這是.bat文件,正在使用該文件作為代理來調用Python腳本。 因此,我將所有參數(腳本名稱除外)傳遞給Python腳本。 直到引號中包含參數和/或包含空格之前,此方法都可以正常工作。
在shell腳本中,可以使用“ $ @”來獲取每個參數並將其用引號引起來。 我可以做些什么來復制此過程嗎?
示例調用:
xt -T sg -t "path with possible spaces" -sum "name with spaces" -p <tool_name> -o lin32 lin64 win32 <lots of other options with possibilities of spaces>
命令/文件xt
僅包含上面列出的代碼,因為實際的可執行文件是其他文件夾中的Python代碼。 因此,關鍵是要創建一個自包含的程序包,在該程序包中,您只需向路徑添加一個目錄(xbin目錄)。
我不確定最干凈的解決方案是什么,但是這是我解決該問題的方法:
setlocal EnableDelayedExpansion
for %%i in (%*) do set _args= !_args! "%%~i"
echo %_args%
%_args%現在將包含每個單獨參數的帶引號的列表。 例如,如果您按以下方式調用批處理文件:
MYBATFILE "test'1'file" "test'2'file" "test 3 file"`
回聲%_args%
將產生原始引用的輸入。
對於采用不友好文件或目錄名稱並將其傳遞給Cygwin Bash Shell腳本的CMD文件,我需要這樣做,而Cygwin Bash Shell腳本會承擔繁重的工作,但是我負擔不起在轉換過程中丟失嵌入式單引號或空格。
注意了〜我 %%〜我%,這是必要的,才適用引號去掉引號。 當傳遞包含空格的參數時(例如,上面的“ test 3文件”),CMD Shell將已經對其應用了引號。 此處的代字號可確保我們不對包含空格的參數進行雙引號處理。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.