2016-06-12 225 views
-1

我帶來一個小問題:'(: 我有很多txt文件,並獲得越來越多的白天,我需要做一個備份和加密他們出於安全原因,所以我做了一個批處理腳本:批處理文件重命名

@echo off 
FOR /R d:\txtwork %%G in (**.txt **.trt) DO (
certutil -f -encode "%%G" "%%G.bak" 
echo. >>D:\txtwork\logs\logbak1.txt %time:~0,-6% - Made a back-up of file - "%%G" 
) 

確定這完美的作品,但我想使一批對他們以及解碼和改變擴展到舊的(從.txt.bak或.trt.bak爲.txt或。 TRT),所以我嘗試並取得這樣的:

@echo off 
FOR /R d:\txtwork %%G in (**.bak) DO (
certutil -f decode "%%G" "%%G:~0,-4" 
) 

但IT奧斯卡最佳噸工作,所以我試圖

@echo off 
FOR /R d:\txtwork %%G in (**.bak) DO (
set var_1="%%G" 
certutil -f decode "%var_1%" "%var_1:~0,-4%" 
) 

它也沒有工作。 幫助?

+0

什麼是錯誤您收到? –

+1

*它沒有工作*不是一個有用的問題描述。以什麼**具體的方式**是它*不工作*?如果您希望我們幫助您,您必須**清楚地**和**明確**解釋您遇到的問題,並**提出實際問題**。 *它也沒有工作。幫助?*不是問題。 –

回答

0
  • "%%G:~0,-4"是完全錯誤的;
  • 檢索var_1變量的值,您需要啓用Delayed Expansion和使用!var_1!,而不是%var_1%儘管這樣做會帶來另一個問題:
    • certutil -f decode "!var_1!" "!var_1:~0,-4!"將擴大到
    • certutil -f decode ""something.txt.bak"" ""something.txt""(注一倍雙引號);
  • 使用下一個set命令語法:set "var_1=%%G"(注意第一個雙引號位置)。

下面的代碼片段應該工作:

@echo off 
SETLOCAL EnableExtensions DisableDelayedExpansion 
FOR /R d:\txtwork %%G in (**.bak) DO (
    set "var_1=%%G" 
    SETLOCAL EnableDelayedExpansion 
    certutil -f decode "!var_1!" "!var_1:~0,-4!" 
    ENDLOCAL 
) 

但是,你可以使用Parameter Extensions如下:

@echo off 
SETLOCAL EnableExtensions 
FOR /R d:\txtwork %%G in (**.bak) DO (
    certutil -f decode "%%G" "%%~dpnG" 
)