如何批量增加文件名?

时间:2016-08-29 08:15:04

标签: json windows batch-file

我正在编写一个批处理文件,可以使用谷歌地图地理位置API跟踪丢失的Android手机。我无法理解我的代码有什么问题。我按照我在互联网上找到的所有内容,但是如果我运行代码,它会返回“语法不正确”或类似的内容。如果基本名称存在,它基本上会增加文件名。你能告诉我我的代码有什么问题吗?我该如何纠正它?

:MainProcessNew
cd C:\Users\%USERNAME%\Documents
for %%G IN (*.json) do (
set file = %%G
)
set "baseName=data"
set "n=0"

:loop
set /a n+=1
if exist "%baseName%%n%.json (
goto loop
)

echo.>"C:\Users\%USERNAME%\Documents\data%n%.json"

2 个答案:

答案 0 :(得分:1)

使用此批次代码:

:MainProcessNew
cd /D "%USERPROFILE%\Documents"
for %%G in (*.json) do set "FileName=%%G"

set "BaseName=data"
set "FileNumber=0"

:FileNameLoop
set /A FileNumber+=1
if exist "%BaseName%%FileNumber%.json" goto FileNameLoop

echo/>"%USERPROFILE%\Documents\%BaseName%%FileNumber%.json"

主要错误是 IF 条件行中缺少双引号。

但也有其他错误和代码行可以改进。

请勿使用C:\Users\%USERNAME%,因为用户的个人资料目录也可以位于驱动器C:之外的其他驱动器上。请改为使用预定义环境变量USERPROFILE的值。

当前用户的文档文件夹路径可以包含1个或多个空格,例如,当用户名包含空格时。因此,请始终用双引号括起用户配置文件相关的文件夹路径。

命令 CD 应始终与/D一起使用,以更改当前驱动器(如果不是100%保证批处理的当前目录和新当前目录在同一驱动器上)

永远不要为具有等号空格的环境变量赋值,有关此常见错误的解释,请参阅Why is no string output with 'echo %var%' after using 'set var = text' on command line?

如果仅执行1个命令,则不要为命令 FOR IF 定义带括号的命令块,因为这两个命令最初是为运行而设计的只有1个命令。

建议在CamelCase表示法中使用好的变量名。很难搜索n来查找该环境变量的所有匹配项,但很容易搜索FileNumber

要了解使用的命令及其工作原理,请打开命令提示符窗口,执行以下命令,并完全阅读为每个命令显示的所有帮助页面。

  • cd /?
  • echo /?
  • for /?
  • goto /?
  • if /?
  • set /?

答案 1 :(得分:0)

可能还有一个n+1会有帮助吗?

:loop
set /a n+=1
if exist "%baseName%%n%.json" (
    goto loop
)
set /a n+=1
echo.>"C:\Users\%USERNAME%\Documents\data%n%.json"`