Próbuję uzyskać plik zapisywania oparty na gui jako okno dialogowe z poziomu skryptu wsadowego Windows. Chciałbym mieć nowy przycisk folderu po lewej stronie przycisku anulowania zapisu &. Bez predefiniowanego rodzaju pliku. Więc prawdopodobnie musiałby być ustawiony na wszystkie pliki.Zapisz okno dialogowe pliku z PowerShell/C# z cmd partii
Coś podobnego do tego:
(Ignore przycisków w lewym górnym rogu)
Znalazłem piękny soloution, z górnego odpowiedzi na otwarcie pliku tutaj: File/folder chooser dialog from a Windows batch script
Byłoby miło mieć podobne soloution dla zapisu jako dialog. Co najważniejsze, chciałbym ustawić ścieżkę do nazwy pliku & na własne zmienne. W celu lub ze względu na przykład. Możemy wstawić "Hello World" jako wynik.
exempli gratia:
echo Hello World > %variable.path%%variable.file%
Poniższy przykład jest bezpośredni cytat z połączonego postu.
:: 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
starałem się dostosować powyższy przykład do pracy na Zapisz jako. Ale nie rozumiem tego wystarczająco dobrze, aby to zrobić. Dlatego używam przede wszystkim skryptów wsadowych, a nie lepiej funkcjonującego języka programowania.
Moje zrozumienie powyższego jest takie, że jest to skrypt wsadowy systemu Windows, który wywołuje PowerShell, jeśli istnieje lub PowerShell nie istnieje .net, jeśli istnieje. Będę wtedy używał mojego istniejącego kodu jako alternatywy, jeśli żadna nie istnieje. Alternatywą jest tylko użytkownik wprowadził pełną ścieżkę ręcznie.
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
Prosiłbym o istniejący post. Ale jest to niedozwolone w regułach witryny. Zapytałem więc osobno. Każda pomoc lub wgląd jest mile widziany.
Dziękuję za poświęcony czas: & wysiłek.
Moje rozwiązanie jest krótsze, mam 2 pytania: dlaczego emcapsulate twój kod PowerShell do CMD kod? Dlaczego kompilujesz C# w PowerShellu, gdzie używasz go inline (Add-Type) lub w twoim przypadku po prostu korzystasz z klas .NET bez C#? – JPBlanc
Ma to na celu otwarcie okna dialogowego skryptu wsadowego Windows, pliku .bat. Nie jestem tym, który zmienił pozycję do stanu powershell, a nie partii. Moje wyniki są niemal bezpośrednią kopią kodu, który znalazłem, cytowany tutaj, z połączonego postu. Tak więc dla C# bit. Nie jestem do końca pewny. Ale lubię mieć drugą funkcjonalną alternatywę. – Terus