跳转至内容
  • 最新
  • 版块
  • 标签
  • 热门
  • 用户
  • 群组
  • 太微中文教程
  • 新插件投票看板
皮肤
  • 浅色
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • 深色
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • 默认(不使用皮肤)
  • 不使用皮肤
折叠
太微中文论坛icon

太微中文展示

  1. 首页信息流
  2. 版块
  3. 讨论
  4. 如何批量导出文件为 .tid 或者 .json?

如何批量导出文件为 .tid 或者 .json?

已定时 已固定 已锁定 已移动 已解决 讨论
13 帖子 3 发布者 634 浏览 1 关注中
  • 从旧到新
  • 从新到旧
  • 最多赞同
回复
  • 在新帖中回复
登录后回复
此主题已被删除。只有拥有主题管理权限的用户可以查看。
  • K 离线
    K 离线
    Keaton
    写于 最后由 Keaton 编辑
    #1

    比如下方按钮的目的是批量导出 20 个后缀为 .tid 的文件:

    \define exportButton(exportFilter)
    \whitespace trim
    <$button dragFilter=<<__exportFilter__>> class="tc-btn-invisible">
    <$list filter="[subfilter<__exportFilter__>]" variable="listItem">
    <$action-sendmessage
      $message="tm-download-file"
      $param="$:/core/templates/exporters/TidFile"
      exportFilter={{{ [<listItem>format:titlelist[]] }}}
      filename={{{ [<listItem>addsuffix[.tid]] }}}
    />
    </$list>
    {{$:/core/images/export-button}}
    <span class="tc-btn-text">
    <$text text="Batch export tiddlers (.tid)"/>
    </span>
    </$button>
    \end
    
    <<exportButton "[tag[People]limit[20]]">>
    

    实际上,该按钮并未成功导出 20 个目标文件。你可以在 https://keatonlao.github.io/tiddlywiki-xp/ 里测试。

    一个笨拙的方法是,新建一个空白版 server,然后将条目选集拖进去,从而实现批量导出。

    我想知道是否能通过下载的方式,实现批量导出文件为 .tid 或者 .json?


    解决办法

    感谢 @机杼 提供的解决办法,使用插件 $:/plugins/tiddlywiki/jszip,可以批量导出文件为 .tid 或者 .json。

    参考如下批量导出按钮:

    \define zipTiddler() $:/temp/batchexport/_ZipTiddler
    
    \procedure batchExportButton(exportFilter)
    \procedure actions-render-tid-tiddler()
    <$action-sendmessage $message="tm-zip-create" $param=<<zipTiddler>>/>
    <$set name="tv-filter-export-link" value="[slugify[]addsuffix[.tid]]">
    <$list filter=<<exportFilter>>>
    <$action-sendmessage
    	$message="tm-zip-render-file"
    	$param=<<zipTiddler>>
    	filename={{{ [<currentTiddler>prefix[$:/]split[/]rest[1]slugify[]join[_]addprefix[$__]addsuffix[.tid]] ~[<currentTiddler>split[/]join[_]addsuffix[.tid]] }}}
    	tiddler=<<currentTiddler>>
    	template="$:/core/templates/tid-tiddler"
    />
    </$list>
    </$set>
    <$action-sendmessage $message="tm-zip-download" $param=<<zipTiddler>> filename="tiddlers.zip"/>
    \end actions-render-tid-tiddler
    
    \procedure actions-render-json-tiddler()
    <$action-sendmessage $message="tm-zip-create" $param=<<zipTiddler>>/>
    <$set name="tv-filter-export-link" value="[slugify[]addsuffix[.json]]">
    <$list filter=<<exportFilter>>>
    <$action-sendmessage
    	$message="tm-zip-render-file"
    	$param=<<zipTiddler>>
    	filename={{{ [<currentTiddler>prefix[$:/]split[/]rest[1]join[_]addprefix[$__]addsuffix[.json]] ~[<currentTiddler>split[/]join[_]addsuffix[.json]] }}}
    	tiddler=<<currentTiddler>>
    	template="$:/core/templates/json-tiddler"
    />
    </$list>
    </$set>
    <$action-sendmessage $message="tm-zip-download" $param=<<zipTiddler>> filename="jsontiddlers.zip"/>
    \end actions-render-json-tiddler
    
    <$vars hint={{$:/language/Buttons/ExportTiddlers/Hint}} caption={{$:/language/Buttons/ExportTiddlers/Caption}}>
    <span class="tc-popup-keep"><$button popup=<<qualify "$:/state/popup/batchexport">> dragFilter=<<exportFilter>> tooltip=<<hint>> aria-label=<<caption>> class=<<tv-config-toolbar-class>> selectedClass="tc-selected">
    <$list filter="[<tv-config-toolbar-icons>match[yes]]">
    {{$:/core/images/export-button}}
    </$list>
    <$list filter="[<tv-config-toolbar-text>match[yes]]">
    <span class="tc-btn-text"><$text text=<<caption>>/></span>
    </$list>
    </$button></span></$vars><$reveal state=<<qualify "$:/state/popup/batchexport">> type="popup" position="below" animate="yes">
    <div class="tc-drop-down">
    <$button class="tc-btn-invisible">
    <<actions-render-tid-tiddler>>
    {{$:/language/Exporters/TidFile}}
    </$button>
    <$button class="tc-btn-invisible">
    <<actions-render-json-tiddler>>
    {{$:/language/Exporters/JsonFile}}
    </$button>
    </div>
    </$reveal>
    \end batchExportButton
    
    <<batchExportButton "[tag[People]limit[20]]">>
    
    机杼机 oeyoewsO 2 条回复 最后回复
    0
    • oeyoewsO oeyoews

      不是浏览器的限制

      function downloadFiles(fileUrls) {
        for (let i = 0; i < fileUrls.length; i++) {
          let link = document.createElement('a');
          link.href = fileUrls[i];
          link.download = `文件${i + 1}.pdf`;  // 设置文件名,这里用了一个简单的命名方式
          link.style.display = 'none';
          document.body.appendChild(link);
          link.click();
          document.body.removeChild(link);
        }
      }
      
      // 调用该函数,传入文件的URL数组
      const fileUrls = [
        'URL1',
        'URL2',
        'URL3', 'URL1',
        'URL2',
        'URL3', 'URL1',
        'URL2',
        'URL3', 'URL1',
        'URL2',
        'URL3', 'URL1',
        'URL2',
        'URL3',
      ];
      downloadFiles(fileUrls);
      
      K 离线
      K 离线
      Keaton
      写于 最后由 编辑
      #13

      @oeyoews 使用插件 $:/plugins/tiddlywiki/jszip 可以批量导出。方法已经更新在上面了。

      1 条回复 最后回复
      0
      • 机杼机 离线
        机杼机 离线
        机杼
        写于 最后由 编辑
        #2

        image.png

        image.png

        我这里是直接在高级搜索那边,把筛选器放过去,可以看到有20个条目。然后导入到另一个wiki里也是正常的。

        如果想要导出的是一个文件夹,每一个都是tid文件,好像也能做到,不过要装插件。插件忘了是什么了。

        1 条回复 最后回复
        0
        • K Keaton

          比如下方按钮的目的是批量导出 20 个后缀为 .tid 的文件:

          \define exportButton(exportFilter)
          \whitespace trim
          <$button dragFilter=<<__exportFilter__>> class="tc-btn-invisible">
          <$list filter="[subfilter<__exportFilter__>]" variable="listItem">
          <$action-sendmessage
            $message="tm-download-file"
            $param="$:/core/templates/exporters/TidFile"
            exportFilter={{{ [<listItem>format:titlelist[]] }}}
            filename={{{ [<listItem>addsuffix[.tid]] }}}
          />
          </$list>
          {{$:/core/images/export-button}}
          <span class="tc-btn-text">
          <$text text="Batch export tiddlers (.tid)"/>
          </span>
          </$button>
          \end
          
          <<exportButton "[tag[People]limit[20]]">>
          

          实际上,该按钮并未成功导出 20 个目标文件。你可以在 https://keatonlao.github.io/tiddlywiki-xp/ 里测试。

          一个笨拙的方法是,新建一个空白版 server,然后将条目选集拖进去,从而实现批量导出。

          我想知道是否能通过下载的方式,实现批量导出文件为 .tid 或者 .json?


          解决办法

          感谢 @机杼 提供的解决办法,使用插件 $:/plugins/tiddlywiki/jszip,可以批量导出文件为 .tid 或者 .json。

          参考如下批量导出按钮:

          \define zipTiddler() $:/temp/batchexport/_ZipTiddler
          
          \procedure batchExportButton(exportFilter)
          \procedure actions-render-tid-tiddler()
          <$action-sendmessage $message="tm-zip-create" $param=<<zipTiddler>>/>
          <$set name="tv-filter-export-link" value="[slugify[]addsuffix[.tid]]">
          <$list filter=<<exportFilter>>>
          <$action-sendmessage
          	$message="tm-zip-render-file"
          	$param=<<zipTiddler>>
          	filename={{{ [<currentTiddler>prefix[$:/]split[/]rest[1]slugify[]join[_]addprefix[$__]addsuffix[.tid]] ~[<currentTiddler>split[/]join[_]addsuffix[.tid]] }}}
          	tiddler=<<currentTiddler>>
          	template="$:/core/templates/tid-tiddler"
          />
          </$list>
          </$set>
          <$action-sendmessage $message="tm-zip-download" $param=<<zipTiddler>> filename="tiddlers.zip"/>
          \end actions-render-tid-tiddler
          
          \procedure actions-render-json-tiddler()
          <$action-sendmessage $message="tm-zip-create" $param=<<zipTiddler>>/>
          <$set name="tv-filter-export-link" value="[slugify[]addsuffix[.json]]">
          <$list filter=<<exportFilter>>>
          <$action-sendmessage
          	$message="tm-zip-render-file"
          	$param=<<zipTiddler>>
          	filename={{{ [<currentTiddler>prefix[$:/]split[/]rest[1]join[_]addprefix[$__]addsuffix[.json]] ~[<currentTiddler>split[/]join[_]addsuffix[.json]] }}}
          	tiddler=<<currentTiddler>>
          	template="$:/core/templates/json-tiddler"
          />
          </$list>
          </$set>
          <$action-sendmessage $message="tm-zip-download" $param=<<zipTiddler>> filename="jsontiddlers.zip"/>
          \end actions-render-json-tiddler
          
          <$vars hint={{$:/language/Buttons/ExportTiddlers/Hint}} caption={{$:/language/Buttons/ExportTiddlers/Caption}}>
          <span class="tc-popup-keep"><$button popup=<<qualify "$:/state/popup/batchexport">> dragFilter=<<exportFilter>> tooltip=<<hint>> aria-label=<<caption>> class=<<tv-config-toolbar-class>> selectedClass="tc-selected">
          <$list filter="[<tv-config-toolbar-icons>match[yes]]">
          {{$:/core/images/export-button}}
          </$list>
          <$list filter="[<tv-config-toolbar-text>match[yes]]">
          <span class="tc-btn-text"><$text text=<<caption>>/></span>
          </$list>
          </$button></span></$vars><$reveal state=<<qualify "$:/state/popup/batchexport">> type="popup" position="below" animate="yes">
          <div class="tc-drop-down">
          <$button class="tc-btn-invisible">
          <<actions-render-tid-tiddler>>
          {{$:/language/Exporters/TidFile}}
          </$button>
          <$button class="tc-btn-invisible">
          <<actions-render-json-tiddler>>
          {{$:/language/Exporters/JsonFile}}
          </$button>
          </div>
          </$reveal>
          \end batchExportButton
          
          <<batchExportButton "[tag[People]limit[20]]">>
          
          机杼机 离线
          机杼机 离线
          机杼
          写于 最后由 编辑
          #3

          @Keaton 在 如何批量导出文件为 .tid 或者 .json? 中说:

          filename={{{ [<listItem>addsuffix[.tid]] }}}

          这里应该不需要特意写加上后缀。因为加上了后缀反而有可能让文件名失效。

          不过我也没太看懂这个宏是怎么写的。

          K 1 条回复 最后回复
          0
          • 机杼机 机杼

            @Keaton 在 如何批量导出文件为 .tid 或者 .json? 中说:

            filename={{{ [<listItem>addsuffix[.tid]] }}}

            这里应该不需要特意写加上后缀。因为加上了后缀反而有可能让文件名失效。

            不过我也没太看懂这个宏是怎么写的。

            K 离线
            K 离线
            Keaton
            写于 最后由 编辑
            #4

            @机杼 这个话题探讨的是批量下载到硬盘上,而不是维基之间的数据导入。

            机杼机 1 条回复 最后回复
            0
            • K Keaton

              @机杼 这个话题探讨的是批量下载到硬盘上,而不是维基之间的数据导入。

              机杼机 离线
              机杼机 离线
              机杼
              写于 最后由 编辑
              #5

              @Keaton 你是说把数据导出为tid,然后保存在硬盘上是吗?

              有两种方式,一种是使用$:/plugins/kookma/gatha插件,另一种方式是找个空白版本,然后把json导入进去。再把这个空白版本用nodejs命令行解析成nodejs,太记可以做到。

              还有一种更麻烦的方式,也是用nodejs,在里面写一个保存路径,让特写的筛选器筛选出来的条目保存在特定文件夹中。太微中文教程就是把所有系统条目都放到另一个文件夹里去了。

              机杼机 1 条回复 最后回复
              0
              • 机杼机 离线
                机杼机 离线
                机杼
                写于 最后由 编辑
                #6

                就如果很需要tid这种细粒化的保存方式,用nodejs是比较好的,这也是太记比其他使用方式要好的地方。

                1 条回复 最后回复
                0
                • 机杼机 机杼

                  @Keaton 你是说把数据导出为tid,然后保存在硬盘上是吗?

                  有两种方式,一种是使用$:/plugins/kookma/gatha插件,另一种方式是找个空白版本,然后把json导入进去。再把这个空白版本用nodejs命令行解析成nodejs,太记可以做到。

                  还有一种更麻烦的方式,也是用nodejs,在里面写一个保存路径,让特写的筛选器筛选出来的条目保存在特定文件夹中。太微中文教程就是把所有系统条目都放到另一个文件夹里去了。

                  机杼机 离线
                  机杼机 离线
                  机杼
                  写于 最后由 编辑
                  #7

                  @Keaton $:/plugins/tiddlywiki/jszip这个插件可能是你需要的。上面$:/plugins/kookma/gatha插件,也就是附加了这个插件才有了可以导出条目为zip的功能。zip解压出来是一系列tid条目。

                  1 条回复 最后回复
                  0
                  • K Keaton

                    比如下方按钮的目的是批量导出 20 个后缀为 .tid 的文件:

                    \define exportButton(exportFilter)
                    \whitespace trim
                    <$button dragFilter=<<__exportFilter__>> class="tc-btn-invisible">
                    <$list filter="[subfilter<__exportFilter__>]" variable="listItem">
                    <$action-sendmessage
                      $message="tm-download-file"
                      $param="$:/core/templates/exporters/TidFile"
                      exportFilter={{{ [<listItem>format:titlelist[]] }}}
                      filename={{{ [<listItem>addsuffix[.tid]] }}}
                    />
                    </$list>
                    {{$:/core/images/export-button}}
                    <span class="tc-btn-text">
                    <$text text="Batch export tiddlers (.tid)"/>
                    </span>
                    </$button>
                    \end
                    
                    <<exportButton "[tag[People]limit[20]]">>
                    

                    实际上,该按钮并未成功导出 20 个目标文件。你可以在 https://keatonlao.github.io/tiddlywiki-xp/ 里测试。

                    一个笨拙的方法是,新建一个空白版 server,然后将条目选集拖进去,从而实现批量导出。

                    我想知道是否能通过下载的方式,实现批量导出文件为 .tid 或者 .json?


                    解决办法

                    感谢 @机杼 提供的解决办法,使用插件 $:/plugins/tiddlywiki/jszip,可以批量导出文件为 .tid 或者 .json。

                    参考如下批量导出按钮:

                    \define zipTiddler() $:/temp/batchexport/_ZipTiddler
                    
                    \procedure batchExportButton(exportFilter)
                    \procedure actions-render-tid-tiddler()
                    <$action-sendmessage $message="tm-zip-create" $param=<<zipTiddler>>/>
                    <$set name="tv-filter-export-link" value="[slugify[]addsuffix[.tid]]">
                    <$list filter=<<exportFilter>>>
                    <$action-sendmessage
                    	$message="tm-zip-render-file"
                    	$param=<<zipTiddler>>
                    	filename={{{ [<currentTiddler>prefix[$:/]split[/]rest[1]slugify[]join[_]addprefix[$__]addsuffix[.tid]] ~[<currentTiddler>split[/]join[_]addsuffix[.tid]] }}}
                    	tiddler=<<currentTiddler>>
                    	template="$:/core/templates/tid-tiddler"
                    />
                    </$list>
                    </$set>
                    <$action-sendmessage $message="tm-zip-download" $param=<<zipTiddler>> filename="tiddlers.zip"/>
                    \end actions-render-tid-tiddler
                    
                    \procedure actions-render-json-tiddler()
                    <$action-sendmessage $message="tm-zip-create" $param=<<zipTiddler>>/>
                    <$set name="tv-filter-export-link" value="[slugify[]addsuffix[.json]]">
                    <$list filter=<<exportFilter>>>
                    <$action-sendmessage
                    	$message="tm-zip-render-file"
                    	$param=<<zipTiddler>>
                    	filename={{{ [<currentTiddler>prefix[$:/]split[/]rest[1]join[_]addprefix[$__]addsuffix[.json]] ~[<currentTiddler>split[/]join[_]addsuffix[.json]] }}}
                    	tiddler=<<currentTiddler>>
                    	template="$:/core/templates/json-tiddler"
                    />
                    </$list>
                    </$set>
                    <$action-sendmessage $message="tm-zip-download" $param=<<zipTiddler>> filename="jsontiddlers.zip"/>
                    \end actions-render-json-tiddler
                    
                    <$vars hint={{$:/language/Buttons/ExportTiddlers/Hint}} caption={{$:/language/Buttons/ExportTiddlers/Caption}}>
                    <span class="tc-popup-keep"><$button popup=<<qualify "$:/state/popup/batchexport">> dragFilter=<<exportFilter>> tooltip=<<hint>> aria-label=<<caption>> class=<<tv-config-toolbar-class>> selectedClass="tc-selected">
                    <$list filter="[<tv-config-toolbar-icons>match[yes]]">
                    {{$:/core/images/export-button}}
                    </$list>
                    <$list filter="[<tv-config-toolbar-text>match[yes]]">
                    <span class="tc-btn-text"><$text text=<<caption>>/></span>
                    </$list>
                    </$button></span></$vars><$reveal state=<<qualify "$:/state/popup/batchexport">> type="popup" position="below" animate="yes">
                    <div class="tc-drop-down">
                    <$button class="tc-btn-invisible">
                    <<actions-render-tid-tiddler>>
                    {{$:/language/Exporters/TidFile}}
                    </$button>
                    <$button class="tc-btn-invisible">
                    <<actions-render-json-tiddler>>
                    {{$:/language/Exporters/JsonFile}}
                    </$button>
                    </div>
                    </$reveal>
                    \end batchExportButton
                    
                    <<batchExportButton "[tag[People]limit[20]]">>
                    
                    oeyoewsO 离线
                    oeyoewsO 离线
                    oeyoews
                    写于 最后由 编辑
                    #8

                    @Keaton 为什么只能最多导出10个, 感觉是tw做了限制

                    K 1 条回复 最后回复
                    0
                    • 机杼机 离线
                      机杼机 离线
                      机杼
                      写于 最后由 编辑
                      #9

                      @Keaton 我感觉不像是tw的限制,而像是浏览器的限制。

                      机杼机 1 条回复 最后回复
                      0
                      • 机杼机 机杼

                        @Keaton 我感觉不像是tw的限制,而像是浏览器的限制。

                        机杼机 离线
                        机杼机 离线
                        机杼
                        写于 最后由 编辑
                        #10

                        @机杼 但用edge浏览器,设置了允许并行下载后,还是只能下载10个,感觉还是有点离谱。如果能生成下载链接的话,应该用脚本下载比较好。

                        1 条回复 最后回复
                        0
                        • oeyoewsO oeyoews

                          @Keaton 为什么只能最多导出10个, 感觉是tw做了限制

                          K 离线
                          K 离线
                          Keaton
                          写于 最后由 编辑
                          #11

                          @oeyoews 很怪异,有的时候下载能超过 10 个。不过大部分是 10 个。

                          1 条回复 最后回复
                          0
                          • oeyoewsO 离线
                            oeyoewsO 离线
                            oeyoews
                            写于 最后由 编辑
                            #12

                            不是浏览器的限制

                            function downloadFiles(fileUrls) {
                              for (let i = 0; i < fileUrls.length; i++) {
                                let link = document.createElement('a');
                                link.href = fileUrls[i];
                                link.download = `文件${i + 1}.pdf`;  // 设置文件名,这里用了一个简单的命名方式
                                link.style.display = 'none';
                                document.body.appendChild(link);
                                link.click();
                                document.body.removeChild(link);
                              }
                            }
                            
                            // 调用该函数,传入文件的URL数组
                            const fileUrls = [
                              'URL1',
                              'URL2',
                              'URL3', 'URL1',
                              'URL2',
                              'URL3', 'URL1',
                              'URL2',
                              'URL3', 'URL1',
                              'URL2',
                              'URL3', 'URL1',
                              'URL2',
                              'URL3',
                            ];
                            downloadFiles(fileUrls);
                            
                            K 1 条回复 最后回复
                            0
                            • oeyoewsO oeyoews

                              不是浏览器的限制

                              function downloadFiles(fileUrls) {
                                for (let i = 0; i < fileUrls.length; i++) {
                                  let link = document.createElement('a');
                                  link.href = fileUrls[i];
                                  link.download = `文件${i + 1}.pdf`;  // 设置文件名,这里用了一个简单的命名方式
                                  link.style.display = 'none';
                                  document.body.appendChild(link);
                                  link.click();
                                  document.body.removeChild(link);
                                }
                              }
                              
                              // 调用该函数,传入文件的URL数组
                              const fileUrls = [
                                'URL1',
                                'URL2',
                                'URL3', 'URL1',
                                'URL2',
                                'URL3', 'URL1',
                                'URL2',
                                'URL3', 'URL1',
                                'URL2',
                                'URL3', 'URL1',
                                'URL2',
                                'URL3',
                              ];
                              downloadFiles(fileUrls);
                              
                              K 离线
                              K 离线
                              Keaton
                              写于 最后由 编辑
                              #13

                              @oeyoews 使用插件 $:/plugins/tiddlywiki/jszip 可以批量导出。方法已经更新在上面了。

                              1 条回复 最后回复
                              0
                              • 马萨伊尔马 马萨伊尔 将这个主题转为问答主题,在
                              • 马萨伊尔马 马萨伊尔 将这个主题标记为已解决,在
                              • 马萨伊尔马 马萨伊尔 将这个主题标记为已解决,在

                              你好!看起来您对这段对话很感兴趣,但您还没有一个账号。

                              厌倦了每次访问都刷到同样的帖子?您注册账号后,您每次返回时都能精准定位到您上次浏览的位置,并可选择接收新回复通知(通过邮件或推送通知)。您还能收藏书签、为帖子顶,向社区成员表达您的欣赏。

                              有了你的建议,这篇帖子会更精彩哦 💗

                              注册 登录
                              回复
                              • 在新帖中回复
                              登录后回复
                              • 从旧到新
                              • 从新到旧
                              • 最多赞同


                              • 登录

                              • 没有帐号? 注册

                              • 登录或注册以进行搜索。
                              Powered by NodeBB Contributors
                              • 第一个帖子
                                最后一个帖子
                              0
                              • 最新
                              • 版块
                              • 标签
                              • 热门
                              • 用户
                              • 群组
                              • 太微中文教程
                              • 新插件投票看板