批处理文件重命名

时间:2016-06-12 18:22:01

标签: batch-file

我遇到一个小问题:'(: 我有很多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" 
)

但是我的工作已经完成了我的尝试

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

它也没有用。 帮忙?

1 个答案:

答案 0 :(得分: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" 
)