簡體   English   中英

批處理文件等效於帶引號的Unix參數擴展

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM