Json 如何批量递增文件名?
我正在编写一个批处理文件,可以使用谷歌地图地理定位API跟踪丢失的android手机。我无法理解我的代码有什么问题。我跟踪了我在互联网上找到的所有东西,但是如果我运行代码,它会返回“语法不正确”或类似的内容。如果basename存在,它基本上会增加一个文件名。你能告诉我我的代码有什么问题吗?我该如何更正它Json 如何批量递增文件名?,json,windows,batch-file,Json,Windows,Batch File,我正在编写一个批处理文件,可以使用谷歌地图地理定位API跟踪丢失的android手机。我无法理解我的代码有什么问题。我跟踪了我在互联网上找到的所有东西,但是如果我运行代码,它会返回“语法不正确”或类似的内容。如果basename存在,它基本上会增加一个文件名。你能告诉我我的代码有什么问题吗?我该如何更正它 :MainProcessNew cd C:\Users\%USERNAME%\Documents for %%G IN (*.json) do ( set file = %%G ) set "
: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"
还有一个
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"`
使用此批处理代码:
: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个或多个空格,例如,当用户名包含空格时。因此,始终将用户配置文件相关的文件夹路径用双引号括起来
如果不能100%保证批处理的当前目录和新的当前目录位于同一驱动器上,则应始终将命令CD与/D
一起使用,以更改当前驱动器
切勿将值赋给等号周围有空格的环境变量,有关此常见错误的解释,请参阅
不要为的命令和如果只有一个命令应该执行的命令定义带括号的命令块,因为这两个命令最初设计为只运行一个命令
建议在CamelCase表示法中使用好的变量名。搜索n
很难找到该环境变量的所有匹配项,但搜索FileNumber
很容易
要了解所使用的命令及其工作方式,请打开命令提示符窗口,在其中执行以下命令,并非常仔细地阅读为每个命令显示的所有帮助页面
cd/?
echo/?
获取/?
goto/?
如果/?
设置/?
n+=1
会产生反效果。第一次运行时,文件data1.json
不存在,批处理代码生成data2.json
。在第二次运行时,data1.json
仍然不存在,因此现有的data2.json
被覆盖。现在每次运行时都会出现这种情况。中缺少结束引号(如果存在)。…(
?设置文件=%%G
设置一个名为文件
+空间对空间+值%%G
)…非常感谢您,先生!我花了很多天试图找出它。谢谢!