簡體   English   中英

批處理文件變量的文件名和編輯

[英]Batch file variable filenames and editing

這是游戲的新手,並花了許多時間尋找幫助和示例。 盡管我想通過使用單個輸入文件'computer_listc.txt'來簡化此過程,但我已經有了一個可以正常工作的版本。 我基本上想讀取一系列文件夾路徑(來自computer_listc.txt),並使用路徑的一部分來編寫其他cmd表達式。

我的問題是fname和comp_id的設置不正確。 我想使它們等於T(文件名),然后對其進行編輯。

fname必須是已刪除前12個字符的文件路徑。 當comp_id需要等於文件路徑中指定的計算機名時,例如

fname = c_modelling\model\slave1
comp_id = VOSTRO460-1

這是腳本。 你能看到我的錯誤嗎?

for /f "usebackq tokens=*" %%T in ("C:\c_modelling\Model\cal21_cal\Computer_ListC.TXT") do (
set fname = %%T
ren fname "%fname%" "C:\%fname%:~12%"
set comp_id = %%T
%comp_id% = %{comp_id:0:12} 
mkdir %%T > NUL 2>&1
echo cd %fname% >\\%%T\beo_insC.cmd
echo beo >>\\%%T\beo_insC.cmd
robocopy c:\c_modelling\model\cal21_cal \\%%T\ /s /e
start cmd.exe /c psexec \\%comp_id% -c c:\c_modelling\model\cal21_cal\beo_insC.cmd
del \\%%T\beo_insC.cmd
)

Computer_ListC.txt包含以下文件名:這最終將具有一長串計算機文件夾路徑。

VOSTRO460-1\c_modelling\model\slave1
VOSTRO460-1\c_modelling\model\slave2

我正在創建一個* .cmd文件以與“ psexec”一起使用,因為當我將進程定向到本地計算機時,該路徑默認為\\ system32。

任何幫助都將非常有幫助!

第一個問題是字符串SET語句中的空格很重要。 變量名和分配的值都將包含任何空格,因此set fname = %%T將設置一個名為"fname "而不是"fname"的變量-其值將包含%%T值之前的前導空格

接下來是永久的延遲擴展問題。 在一個block (帶括號的語句序列)內,任何%var%都將在PARSE時被其值替換-在循環開始執行之前。

要訪問RUN-TIME值,您需要執行SETLOCAL ENABLEDELAYEDEXPANSION語句,並在調用delayedexpansion !var! 訪問RUN -time變量值。

但是請注意,您不能在有罪不罰的循環內簡單地調用delayedexpansion 一次可以打開的數量是有限制的,因此您需要使用ENDLOCAL命令“將括號ENDLOCAL (達到邏輯End-Of-File等效於ENDLOCAL ),缺點是ENDLOCAL可以恢復調用匹配的SETLOCAL時將環境恢復為其值。 因此,通常在批處理開始時(通常在@echo off之后)執行SETLOCAL ENABLEDELAYEDEXPANSION

下期是

ren fname "%fname%" "C:\%fname%:~12%"

重命名命令的語法為ren sourcename newname恰好兩個參數,將任何包含空格的參數括在"rabbit's ears"此外,目標名稱僅是NAME-而不是路徑。

然后是這個:

%comp_id% = %{comp_id:0:12} 

假設您已修復此問題以刪除變量名中的空格,並且已為comp_id分配了值fred並且您已經意識到您正在處理comp_idRUN -time值,那么現在將顯示為

!comp_id!=%{comp_id:0:12} 

批處理將解釋為

fred=%{comp_id:0:12} 

並及時放棄。

您可能期望做的是

set comp_id=!comp_id:~0,12! 

也就是說,從第一個字符( 0 )到12字符,將comp_id設置為comp_id運行時值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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