Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Json 如何批量递增文件名?_Json_Windows_Batch File - Fatal编程技术网

Json 如何批量递增文件名?

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 "

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

: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/?
  • 如果/?
  • 设置/?

它仍然返回相同的字符串。语法不正确。也许for循环有问题?很抱歉,我在for循环中是一个彻头彻尾的noob。@JezreelMartin-if条件中有/缺少引号。您现在可以检查一下吗?@npocmaka额外的
n+=1
会产生反效果。第一次运行时,文件
data1.json
不存在,批处理代码生成
data2.json
。在第二次运行时,
data1.json
仍然不存在,因此现有的
data2.json
被覆盖。现在每次运行时都会出现这种情况。
中缺少结束引号(如果存在)。…(
设置文件=%%G
设置一个名为
文件
+空间对空间+值
%%G
)…非常感谢您,先生!我花了很多天试图找出它。谢谢!