6

Windowsバッチスクリプト内からダイアログとしてGUIベースの保存ファイルを取得しようとしています。保存ボタンとキャンセルボタンの左側に新しいフォルダーボタンを配置したいと思います。定義済みのファイルタイプはありません。したがって、おそらくすべてのファイルに設定する必要があります。

これに似たもの:保存ダイアログ

(左上のボタンは無視してください)

ここでファイルを開くためのトップの回答から、素晴らしい解決策を見つけました: Windowsバッチスクリプトからのファイル/フォルダー選択ダイアログ

ダイアログに名前を付けて保存するための同様の解決策があるとよいでしょう。最も重要なことは、パスとファイル名を独自の変数に設定できることです。例の目的または目的のために。出力として「Hello World」を挿入できます。

例:

echo Hello World > %variable.path%%variable.file%

以下の例は、リンクされた投稿からの直接の引用です。

:: chooser.bat
:: launches a File... Open sort of file chooser and outputs choice to the console

@echo off
setlocal enabledelayedexpansion

:: Does powershell.exe exist within %PATH%?
for %%I in (powershell.exe) do if "%%~$PATH:I" neq "" (
set chooser=powershell "Add-Type -AssemblyName System.windows.forms|Out-Null;$f=New-    Object System.Windows.Forms.OpenFileDialog;$f.InitialDirectory='%cd%';$f.Filter='Text Files     (*.txt)|*.txt|All Files (*.*)|*.*';$f.showHelp=$true;$f.ShowDialog()|Out-Null;$f.FileName"
) else (
rem :: If not, compose and link C# application to open file browser dialog
set chooser=%temp%\chooser.exe
>"%temp%\c.cs" echo using System;using System.Windows.Forms;
>>"%temp%\c.cs" echo class dummy{
>>"%temp%\c.cs" echo public static void Main^(^){
>>"%temp%\c.cs" echo OpenFileDialog f=new OpenFileDialog^(^);
>>"%temp%\c.cs" echo f.InitialDirectory=Environment.CurrentDirectory;
>>"%temp%\c.cs" echo f.Filter="Text Files (*.txt)|*.txt|All Files (*.*)|*.*";
>>"%temp%\c.cs" echo f.ShowHelp=true;
>>"%temp%\c.cs" echo f.ShowDialog^(^);
>>"%temp%\c.cs" echo Console.Write^(f.FileName^);}}
for /f "delims=" %%I in ('dir /b /s "%windir%\microsoft.net\*csc.exe"') do (
    if not exist "!chooser!" "%%I" /nologo /out:"!chooser!" "%temp%\c.cs" 2>NUL
)
del "%temp%\c.cs"
if not exist "!chooser!" (
    echo Error: Please install .NET 2.0 or newer, or install PowerShell.
    goto :EOF
)
)

:: capture choice to a variable
for /f "delims=" %%I in ('%chooser%') do set "filename=%%I"

echo You chose %filename%

:: Clean up the mess
del "%temp%\chooser.exe" 2>NUL
    goto :EOF

ここに画像の説明を入力

上記の例を名前を付けて保存できるように適応させようとしました。しかし、私はそれを行うのに十分なほど理解していません。これが、そもそも高機能のプログラミング言語ではなく、バッチ スクリプトを使用している理由です。

上記についての私の理解は、PowerShellが存在する場合はPowerShellを、存在する場合はPowerShellが存在しない場合は.netを呼び出すのはWindowsバッチスクリプトであるということです。どちらも存在しない場合は、既存のコードを代替として使用します。代替手段では、ユーザーがフルパスを手動で入力するだけです。

echo Set path to file:
echo Path and file cannot contain any spaces. e.g. c:\folder_name\file.ext
echo Be sure you include the filename.
SET /P path1=">"?
cls
echo path set to: %path1%
pause
cls
goto :eof

私は既存の投稿で尋ねたでしょう。しかし、それはサイトのルールでは許可されていません。ということで個別にお願いしました。どんな助けや洞察も大歓迎です。

お時間とご尽力いただきありがとうございます。

4

2 に答える 2

7

Windows フォーム ( SaveFileDialog クラス)を使用した例を次に示します。

Rq : ファイル パネルを右クリックするだけでよいので、新しいディレクトリを作成するためのボタンは必要ありません。

Clear-Host
Add-Type -AssemblyName system.Windows.Forms
$saveFile = New-Object System.Windows.Forms.SaveFileDialog

$saveFile.Filter = "All files (*.*)|*.*"
$saveFile.FilterIndex = 2
$saveFile.RestoreDirectory = $true

$rc = $saveFile.ShowDialog()
if ($rc -eq [System.Windows.Forms.DialogResult]::OK)
{
  $saveFile.FileName
  [System.Windows.Forms.MessageBox]::Show("You can save $($saveFile.FileName)", "Ok")
}

OK のメッセージ ボックスが Windows の上部に表示されないことに注意してください。

于 2013-05-03T03:26:24.853 に答える